You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@celix.apache.org by pn...@apache.org on 2021/05/28 06:46:37 UTC
[celix] branch feature/use_ser_hander_in_psa updated: Adds
backwardsCompatible argument to serializer provider ctor
This is an automated email from the ASF dual-hosted git repository.
pnoltes pushed a commit to branch feature/use_ser_hander_in_psa
in repository https://gitbox.apache.org/repos/asf/celix.git
The following commit(s) were added to refs/heads/feature/use_ser_hander_in_psa by this push:
new 28f4e47 Adds backwardsCompatible argument to serializer provider ctor
28f4e47 is described below
commit 28f4e479a4f49efd181140d8f7eb6a33253fa309
Author: Pepijn Noltes <pe...@gmail.com>
AuthorDate: Fri May 28 08:46:27 2021 +0200
Adds backwardsCompatible argument to serializer provider ctor
---
.../src/pubsub_avrobin_serialization_provider.c | 2 +-
.../src/pubsub_json_serialization_provider.c | 2 +-
.../include/pubsub_serialization_provider.h | 15 ++++--
.../include/pubsub_serializer_provider.h | 54 ----------------------
.../src/pubsub_serialization_provider.c | 5 ++
5 files changed, 18 insertions(+), 60 deletions(-)
diff --git a/bundles/pubsub/pubsub_serializer_avrobin/src/pubsub_avrobin_serialization_provider.c b/bundles/pubsub/pubsub_serializer_avrobin/src/pubsub_avrobin_serialization_provider.c
index 9c81e05..2008613 100644
--- a/bundles/pubsub/pubsub_serializer_avrobin/src/pubsub_avrobin_serialization_provider.c
+++ b/bundles/pubsub/pubsub_serializer_avrobin/src/pubsub_avrobin_serialization_provider.c
@@ -110,7 +110,7 @@ void pubsub_avrobinSerializationProvider_freeDeserializeMsg(pubsub_serialization
}
pubsub_serialization_provider_t* pubsub_avrobinSerializationProvider_create(celix_bundle_context_t* ctx) {
- pubsub_serialization_provider_t* provider = pubsub_serializationProvider_create(ctx, "avrobin", 0, pubsub_avrobinSerializationProvider_serialize, pubsub_avrobinSerializationProvider_freeSerializeMsg, pubsub_avrobinSerializationProvider_deserialize, pubsub_avrobinSerializationProvider_freeDeserializeMsg);
+ pubsub_serialization_provider_t* provider = pubsub_serializationProvider_create(ctx, "avrobin", false, 0, pubsub_avrobinSerializationProvider_serialize, pubsub_avrobinSerializationProvider_freeSerializeMsg, pubsub_avrobinSerializationProvider_deserialize, pubsub_avrobinSerializationProvider_freeDeserializeMsg);
avrobinSerializer_logSetup(dfi_log, pubsub_serializationProvider_getLogHelper(provider), 1);
return provider;
}
diff --git a/bundles/pubsub/pubsub_serializer_json/src/pubsub_json_serialization_provider.c b/bundles/pubsub/pubsub_serializer_json/src/pubsub_json_serialization_provider.c
index 605d108..a43f6b5 100644
--- a/bundles/pubsub/pubsub_serializer_json/src/pubsub_json_serialization_provider.c
+++ b/bundles/pubsub/pubsub_serializer_json/src/pubsub_json_serialization_provider.c
@@ -106,7 +106,7 @@ static void pubsub_jsonSerializationProvider_freeDeserializeMsg(pubsub_serializa
}
pubsub_serialization_provider_t* pubsub_jsonSerializationProvider_create(celix_bundle_context_t* ctx) {
- pubsub_serialization_provider_t* provider = pubsub_serializationProvider_create(ctx, "json", 0, pubsub_jsonSerializationProvider_serialize, pubsub_jsonSerializationProvider_freeSerializeMsg, pubsub_jsonSerializationProvider_deserialize, pubsub_jsonSerializationProvider_freeDeserializeMsg);
+ pubsub_serialization_provider_t* provider = pubsub_serializationProvider_create(ctx, "json", true, 0, pubsub_jsonSerializationProvider_serialize, pubsub_jsonSerializationProvider_freeSerializeMsg, pubsub_jsonSerializationProvider_deserialize, pubsub_jsonSerializationProvider_freeDeserializeMsg);
jsonSerializer_logSetup(dfi_log, pubsub_serializationProvider_getLogHelper(provider), 1);;
return provider;
}
diff --git a/bundles/pubsub/pubsub_utils/include/pubsub_serialization_provider.h b/bundles/pubsub/pubsub_utils/include/pubsub_serialization_provider.h
index 030c0bb..c5bfab2 100644
--- a/bundles/pubsub/pubsub_utils/include/pubsub_serialization_provider.h
+++ b/bundles/pubsub/pubsub_utils/include/pubsub_serialization_provider.h
@@ -49,10 +49,14 @@ typedef struct {
bool valid;
const char* invalidReason;
+
+ //custom user data, will initialized to NULL. If freeUserData is set during destruction of the entry, this will be called.
+ void* userData;
+ void (*freeUserData)(void* userData);
} pubsub_serialization_entry_t;
/**
- * Creates A (descriptor based) Serialization Provider.
+ * @brief Creates A (descriptor based) Serialization Provider.
*
* The provider monitors bundles and creates pubsub message serialization services for every unique descriptor found.
*
@@ -73,6 +77,8 @@ typedef struct {
*
* @param ctx The bundle context
* @param serializationType The serialization type (e.g. 'json')
+ * @param backwardsCompatible Whether the serializer can deserialize data if the minor version is higher. (note true for JSON)
+ * Will be used to set the 'serialization.backwards.compatible' service property for the pusbub_message_serialization_marker
* @param serializationServiceRanking The service raking used for the serialization marker service.
* @param serialize The serialize function to use
* @param freeSerializeMsg The freeSerializeMsg function to use
@@ -84,6 +90,7 @@ typedef struct {
pubsub_serialization_provider_t *pubsub_serializationProvider_create(
celix_bundle_context_t *ctx,
const char* serializationType,
+ bool backwardsCompatible,
long serializationServiceRanking,
celix_status_t (*serialize)(pubsub_serialization_entry_t* entry, const void* msg, struct iovec** output, size_t* outputIovLen),
void (*freeSerializeMsg)(pubsub_serialization_entry_t* entry, struct iovec* input, size_t inputIovLen),
@@ -97,17 +104,17 @@ void pubsub_serializationProvider_destroy(pubsub_serialization_provider_t *provi
/**
- * Returns the number of valid entries.
+ * @brief Returns the number of valid entries.
*/
size_t pubsub_serializationProvider_nrOfEntries(pubsub_serialization_provider_t *provider);
/**
- * Returns the number of invalid entries.
+ * @brief Returns the number of invalid entries.
*/
size_t pubsub_serializationProvider_nrOfInvalidEntries(pubsub_serialization_provider_t *provider);
/**
- * Returns the log helper of the serialization provider.
+ * @brief Returns the log helper of the serialization provider.
*/
celix_log_helper_t* pubsub_serializationProvider_getLogHelper(pubsub_serialization_provider_t *provider);
diff --git a/bundles/pubsub/pubsub_utils/include/pubsub_serializer_provider.h b/bundles/pubsub/pubsub_utils/include/pubsub_serializer_provider.h
deleted file mode 100644
index 034547f..0000000
--- a/bundles/pubsub/pubsub_utils/include/pubsub_serializer_provider.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- *Licensed to the Apache Software Foundation (ASF) under one
- *or more contributor license agreements. See the NOTICE file
- *distributed with this work for additional information
- *regarding copyright ownership. The ASF licenses this file
- *to you under the Apache License, Version 2.0 (the
- *"License"); you may not use this file except in compliance
- *with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- *Unless required by applicable law or agreed to in writing,
- *software distributed under the License is distributed on an
- *"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- *specific language governing permissions and limitations
- *under the License.
- */
-
-#ifndef CELIX_PUBSUB_SERIALIZER_PROVIDER_H
-#define CELIX_PUBSUB_SERIALIZER_PROVIDER_H
-
-typedef struct pubsub_serializer_provider pubsub_serializer_provider_t; //opaque type
-
- /**
- *
- * Creates a handler which track bundles and registers pubsub_custom_msg_serialization_service
- * for every descriptor file found for json serialization.
- *
- * Added properties:
- * serialization.type=json
- * targeted.msg.fqn=<descriptor fqn>
- * targeted.msg.id=<msg fqn hash or msg id annotated in the descriptor>
- * targeted.msg.version=<msg version in descriptor if present> (optional)
- * service.ranking=0
- *
- * For descriptor found multiple times (same fqn and version) only the first one is registered
- *
- * @param ctx
- * @param serializerType
- * @param backwardsCompatible
- * @return
- */
-pubsub_serializer_provider_t* pubsub_providerHandler_create(celix_bundle_context_t* ctx, const char *serializerType /* i.e. json */, bool backwardsCompatible);
-
-void pubsub_providerHandler_destroy(pubsub_serializer_provider_t* handler);
-
-void pubsub_providerHandler_addBundle(pubsub_serializer_provider_t* handler, const celix_bundle_t *bnd);
-void pubsub_providerHandler_removeBundle(pubsub_serializer_provider_t* handler, const celix_bundle_t *bnd);
-
-//note can be used for shell commands
-void pubsub_providerHandler_printRegisteredSerializer(pubsub_serializer_provider_t* handler, FILE *stream);
-
-#endif //CELIX_PUBSUB_SERIALIZER_PROVIDER_H
diff --git a/bundles/pubsub/pubsub_utils/src/pubsub_serialization_provider.c b/bundles/pubsub/pubsub_utils/src/pubsub_serialization_provider.c
index ebba555..b8b8503 100644
--- a/bundles/pubsub/pubsub_utils/src/pubsub_serialization_provider.c
+++ b/bundles/pubsub/pubsub_utils/src/pubsub_serialization_provider.c
@@ -590,6 +590,7 @@ void pubsub_serializationProvider_onInstalledBundle(void *handle, const celix_bu
pubsub_serialization_provider_t *pubsub_serializationProvider_create(
celix_bundle_context_t *ctx,
const char* serializationType,
+ bool backwardsCompatible,
long serializationServiceRanking,
celix_status_t (*serialize)(pubsub_serialization_entry_t* entry, const void* msg, struct iovec** output, size_t* outputIovLen),
void (*freeSerializeMsg)(pubsub_serialization_entry_t* entry, struct iovec* input, size_t inputIovLen),
@@ -651,6 +652,7 @@ pubsub_serialization_provider_t *pubsub_serializationProvider_create(
celix_properties_t* props = celix_properties_create();
provider->markerSvc.handle = provider;
celix_properties_set(props, PUBSUB_MESSAGE_SERIALIZATION_MARKER_SERIALIZATION_TYPE_PROPERTY, provider->serializationType);
+ celix_properties_setBool(props, PUBSUB_MESSAGE_SERIALIZATION_MARKER_SERIALIZATION_BACKWARDS_COMPATIBLE, backwardsCompatible);
celix_service_registration_options_t opts = CELIX_EMPTY_SERVICE_REGISTRATION_OPTIONS;
opts.svc = &provider->markerSvc;
opts.serviceName = PUBSUB_MESSAGE_SERIALIZATION_MARKER_NAME;
@@ -673,6 +675,9 @@ void pubsub_serializationProvider_destroy(pubsub_serialization_provider_t* provi
for (int i = 0; i < celix_arrayList_size(provider->serializationSvcEntries); ++i) {
pubsub_serialization_entry_t *entry = celix_arrayList_get(provider->serializationSvcEntries, i);
celix_bundleContext_unregisterService(provider->ctx, entry->svcId);
+ if (entry->freeUserData) {
+ entry->freeUserData(entry->userData);
+ }
free(entry->descriptorContent);
free(entry->readFromEntryPath);
free(entry->msgVersionStr);