public virtual T Read(byte[] bytes, byte[] schemaVersion)
 {
     try
     {
         if (schemaVersion == null)
         {
             return(Read(bytes));
         }
         else
         {
             var key = BytesSchemaVersion.Of(schemaVersion);
             var sc  = _readerCache.Get(key, new Func <BytesSchemaVersion, ISchemaReader <T> >(LoadReader));
             return(sc.Read(bytes));
         }
     }
     catch (Exception e) when(e is AvroTypeException)
     {
         if (e is AvroTypeException)
         {
             throw new SchemaSerializationException(e);
         }
         //LOG.error("Can't get generic schema for topic {} schema version {}", schemaInfoProvider.Topic, Hex.encodeHexString(schemaVersion), e);
         throw new Exception("Can't get generic schema for topic " + schemaInfoProvider.TopicName);
     }
 }
 public virtual T Read(Stream inputStream, byte[] schemaVersion)
 {
     try
     {
         var key = BytesSchemaVersion.Of(schemaVersion);
         return(schemaVersion == null?Read(inputStream) : _readerCache.Get(key, new Func <BytesSchemaVersion, ISchemaReader <T> >(LoadReader)).Read(inputStream));
     }
     catch (Exception e)
     {
         //LOG.error("Can't get generic schema for topic {} schema version {}", schemaInfoProvider.Topic, Hex.encodeHexString(schemaVersion), e);
         throw new Exception("Can't get generic schema for topic " + schemaInfoProvider.TopicName);
     }
 }
        public async ValueTask <ISchemaInfo> LatestSchema()
        {
            var schema = await _lookup.Ask <AskResponse>(new GetSchema(_topicName)).ConfigureAwait(false);

            if (schema.Failed)
            {
                throw schema.Exception;
            }

            var sch = schema.ConvertTo <GetSchemaInfoResponse>().SchemaInfo;

            _cache.Put(BytesSchemaVersion.Of(sch.Schema), sch);
            return(sch);
        }
 public ISchemaInfo GetSchemaByVersion(byte[] schemaVersion)
 {
     try
     {
         if (schemaVersion != null)
         {
             return(_cache.Get(BytesSchemaVersion.Of(schemaVersion)));
         }
         return(null);
     }
     catch (Exception e)
     {
         _log.Error($"Can't get schema for topic {_topicName} schema version {StringHelper.NewString(schemaVersion)}: {e}");
         return(null);
     }
 }
Пример #5
0
 public override ISchema <T> AtSchemaVersion(byte[] schemaVersion)
 {
     Precondition.Condition.RequireNonNull(schemaVersion, "schemaVersion");
     if (_schemaInfoProvider == null)
     {
         // this schema is not downloaded from the registry
         return(this);
     }
     try
     {
         var schemaInfo = _schemaInfoProvider.GetSchemaByVersion(schemaVersion);
         if (schemaInfo == null)
         {
             throw new SchemaSerializationException("Unknown version " + BytesSchemaVersion.Of(schemaVersion));
         }
         return(GetAbstractStructSchemaAtVersion(schemaVersion, schemaInfo));
     }
     catch (Exception err)
     {
         throw new SchemaSerializationException(err);
     }
 }
        public ISchemaReader <T> GetSchemaReader(byte[] schemaVersion)
        {
            var key = BytesSchemaVersion.Of(schemaVersion);

            return(_readerCache.Get(key, new Func <BytesSchemaVersion, ISchemaReader <T> >(LoadReader)));
        }
Пример #7
0
        private async ValueTask GetSchema(TopicName topicName, byte[] version)
        {
            var request     = Commands.NewGetSchema(_requestId, topicName.ToString(), BytesSchemaVersion.Of(version));
            var payload     = new Payload(request, _requestId, "SendGetRawSchema");
            var askResponse = await _clientCnx.Ask <AskResponse>(payload);

            if (askResponse.Failed)
            {
                _replyTo.Tell(askResponse);
                return;
            }

            var schemaResponse = askResponse.ConvertTo <Messages.GetSchemaResponse>();
            var err            = schemaResponse.Response.ErrorCode;

            if (err != ServerError.UnknownError)
            {
                var e = $"{err}: {schemaResponse.Response.ErrorMessage}";
                _log.Error(e);
                _replyTo.Tell(new AskResponse(new PulsarClientException(new Exception(e))));
            }
            else
            {
                var schema = schemaResponse.Response.Schema;
                var info   = new SchemaInfo
                {
                    Schema     = schema.SchemaData,
                    Name       = schema.Name,
                    Properties = schema.Properties.ToDictionary(k => k.Key, v => v.Value),
                    Type       = SchemaType.ValueOf((int)schema.type)
                };
                _replyTo.Tell(new AskResponse(new GetSchemaInfoResponse(info)));
            }
        }