@Override protected void doHandleSchemaVersionSerialization(OutputStream outputStream, SchemaIdVersion schemaIdVersion) throws SerDesException { // 8 bytes : schema metadata Id // 4 bytes : schema version try { outputStream.write(ByteBuffer.allocate(12) .putLong(schemaIdVersion.getSchemaMetadataId()) .putInt(schemaIdVersion.getVersion()).array()); } catch (IOException e) { throw new AvroRetryableException(e); } }
LOG.info("adding schema version for name [{}] with [{}]", schemaName, schemaVersion); SchemaIdVersion version = schemaRegistry.addSchemaVersion(schemaBranchName, schemaName, schemaVersion); response = WSUtils.respondEntity(version.getVersion(), Response.Status.CREATED); } catch (InvalidSchemaException ex) { LOG.error("Invalid schema error encountered while adding schema [{}] with key [{}]", schemaVersion, schemaName, ex);
LOG.info("adding schema version for name [{}] with [{}]", schemaName, schemaVersion); SchemaIdVersion version = schemaRegistry.addSchemaVersion(schemaBranchName, schemaName, schemaVersion); response = WSUtils.respondEntity(version.getVersion(), Response.Status.CREATED); } catch (InvalidSchemaException ex) { LOG.error("Invalid schema error encountered while adding schema [{}] with key [{}]", schemaVersion, schemaName, ex);
private SchemaVersionInfo doGetSchemaVersionInfo(SchemaIdVersion schemaIdVersion) throws SchemaNotFoundException { if (schemaIdVersion.getSchemaVersionId() != null) { LOG.info("Getting schema version from target registry for [{}]", schemaIdVersion.getSchemaVersionId()); return getEntity(currentSchemaRegistryTargets() .schemaVersionsByIdTarget .path(schemaIdVersion.getSchemaVersionId().toString()), SchemaVersionInfo.class); } else if (schemaIdVersion.getSchemaMetadataId() != null) { SchemaMetadataInfo schemaMetadataInfo = getSchemaMetadataInfo(schemaIdVersion.getSchemaMetadataId()); SchemaVersionKey schemaVersionKey = new SchemaVersionKey(schemaMetadataInfo.getSchemaMetadata() .getName(), schemaIdVersion.getVersion()); LOG.info("Getting schema version from target registry for key [{}]", schemaVersionKey); return doGetSchemaVersionInfo(schemaVersionKey); } throw new IllegalArgumentException("Given argument not valid: " + schemaIdVersion); }
@Override protected MessageContext doSerialize(Object input, SchemaIdVersion schemaIdVersion) throws SerDesException { Map<String, Object> headers = new HashMap<>(); headers.put("protocol.id", getProtocolId()); headers.put("schema.metadata.id", schemaIdVersion.getSchemaMetadataId()); headers.put("schema.version", schemaIdVersion.getVersion()); ByteArrayOutputStream baos = new ByteArrayOutputStream(); try (BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(baos)) { serializePayload(bufferedOutputStream, input); } catch (IOException e) { throw new SerDesException(e); } ByteArrayInputStream payload = new ByteArrayInputStream(baos.toByteArray()); return new MessageContext(headers, payload); } }
private SchemaVersionInfo retrieveSchemaVersionInfo(SchemaIdVersion key) throws SchemaNotFoundException { SchemaVersionInfo schemaVersionInfo = null; if (key.getSchemaVersionId() != null) { schemaVersionInfo = fetchSchemaVersionInfo(key.getSchemaVersionId()); } else if (key.getSchemaMetadataId() != null) { SchemaMetadataInfo schemaMetadataInfo = schemaMetadataFetcher.getSchemaMetadataInfo(key.getSchemaMetadataId()); Integer version = key.getVersion(); schemaVersionInfo = fetchSchemaVersionInfo(schemaMetadataInfo.getSchemaMetadata().getName(), version); } else { throw new IllegalArgumentException("Invalid SchemaIdVersion: " + key); } return schemaVersionInfo; }
SchemaVersionInfo schemaVersionInfo = schemaRegistryClient.getSchemaVersionInfo(new SchemaVersionKey(schemaName, v2.getVersion())); LOG.info("Received schema version info [{}] for schema metadata [{}]", schemaVersionInfo, schemaMetadata);
@Test(expected = InvalidSchemaException.class) public void testInvalidSchema() throws Exception { String schema = "--- random invalid schema ---" + new Date(); SchemaMetadata schemaMetadataInfo = createSchemaInfo(TEST_NAME_RULE.getMethodName(), SchemaCompatibility.BACKWARD); // registering a new schema Integer v1 = schemaRegistry.addSchemaVersion(schemaMetadataInfo, new SchemaVersion(schema, "Initial version of the schema")) .getVersion(); }
@Test(expected = InvalidSchemaException.class) public void testSchemaTextAsNull() throws Exception { SchemaMetadata schemaMetadataInfo = createSchemaInfo(TEST_NAME_RULE.getMethodName(), SchemaCompatibility.BACKWARD); // registering a new schema Integer v1 = schemaRegistry.addSchemaVersion(schemaMetadataInfo, new SchemaVersion(null, "Initial version of the schema")) .getVersion(); }
@Test(expected = InvalidSchemaException.class) public void testSchemaTextAsEmpty() throws Exception { SchemaMetadata schemaMetadataInfo = createSchemaInfo(TEST_NAME_RULE.getMethodName(), SchemaCompatibility.BACKWARD); // registering a new schema Integer v1 = schemaRegistry.addSchemaVersion(schemaMetadataInfo, new SchemaVersion("", "Initial version of the schema")) .getVersion(); }
@Test(expected = IncompatibleSchemaException.class) public void testIncompatibleSchemas() throws Exception { String schema = getSchema("/device.avsc"); String incompatSchema = getSchema("/device-incompat.avsc"); SchemaMetadata schemaMetadata = createSchemaInfo(TEST_NAME_RULE.getMethodName(), SchemaCompatibility.BACKWARD); // registering a new schema Integer v1 = schemaRegistry.addSchemaVersion(schemaMetadata, new SchemaVersion(schema, "Initial version of the schema")) .getVersion(); // adding a new version of the schema Integer v2 = schemaRegistry.addSchemaVersion(schemaMetadata, new SchemaVersion(incompatSchema, "second version")) .getVersion(); }
private SchemaVersionKey addAndDeleteSchemaVersion(String schemaName) throws InvalidSchemaException, IncompatibleSchemaException, SchemaNotFoundException, IOException, SchemaBranchNotFoundException, SchemaLifecycleException { SchemaMetadata schemaMetadata = createSchemaMetadata(schemaName, SchemaCompatibility.BOTH); SchemaIdVersion schemaIdVersion = SCHEMA_REGISTRY_CLIENT.addSchemaVersion(schemaMetadata, new SchemaVersion(AvroSchemaRegistryClientUtil .getSchema("/device.avsc"), "Initial version of the schema")); SchemaVersionKey schemaVersionKey = new SchemaVersionKey(schemaMetadata.getName(), schemaIdVersion.getVersion()); SCHEMA_REGISTRY_CLIENT.deleteSchemaVersion(schemaVersionKey); return schemaVersionKey; }
SchemaVersionInfo schemaVersionInfo = new SchemaVersionInfo(id, input.getName().toString(), schemaIdVersion.getVersion(), input.getSchema().toString(), System.currentTimeMillis(),
.getVersion(); Integer v2 = schemaRegistry.addSchemaVersion(schemaName, new SchemaVersion(schema2, "second version of the the schema")) .getVersion(); Assert.assertTrue(v2 == v1 + 1); .getVersion(); Assert.assertEquals(version, v1);
SchemaIdVersion schemaIdVersion = new SchemaIdVersion(1L, 1, 1L); Device input = new Device(1L, "device", 1, System.currentTimeMillis()); SchemaVersionInfo schemaVersionInfo = new SchemaVersionInfo(1l, input.getName().toString(), schemaIdVersion.getVersion(), input.getSchema().toString(), System.currentTimeMillis(),
SchemaIdVersion v1 = schemaRegistryClient.addSchemaVersion(schemaName, new SchemaVersion(schema1, "Initial version of the schema")); Assert.assertNotNull(v1.getSchemaMetadataId()); Assert.assertEquals(1, v1.getVersion().intValue()); "second version", AvroSchemaRegistryClientTest.class.getResourceAsStream("/schema-2.avsc")); Assert.assertEquals(v1.getVersion() + 1, v2.getVersion().intValue()); .getVersion())); SchemaVersionInfo latest = schemaRegistryClient.getLatestSchemaVersionInfo(schemaName); Assert.assertEquals(latest, schemaVersionInfo);
@Test public void testHASanity() throws Exception { SchemaRegistryTestServerClientWrapper followerServer = followerSchemaRegistryServer(); SchemaRegistryClient schemaRegistryClient = followerServer.getClient(); // registering schema metadata on follower, this should have been redirected to leader. String schemaName = "foo"; SchemaMetadata schemaMetadata = new SchemaMetadata.Builder(schemaName).type("avro").build(); Long schemaId = schemaRegistryClient.registerSchemaMetadata(schemaMetadata); Assert.assertNotNull(schemaId); // registering a new schema on follower, this should have been redirected to leader. String schema1 = IOUtils.toString(LocalRegistryServerTest.class.getResourceAsStream("/schema-1.avsc"), "UTF-8"); SchemaIdVersion v1 = schemaRegistryClient.addSchemaVersion(schemaName, new SchemaVersion(schema1, "Initial version of the schema")); // retrieve schema on leader as the schema data is stored in memory in leader. this data does not exist on // followers as the storage is inmemory. SchemaRegistryTestServerClientWrapper leaderServer = leaderSchemaRegistryServer(); int leaderPort = leaderServer.getLocalPort(); SchemaRegistryClient leaderClient = leaderServer.getClient(); SchemaMetadataInfo schemaMetadataInfo = leaderClient.getSchemaMetadataInfo(schemaName); Assert.assertEquals(schemaMetadata, schemaMetadataInfo.getSchemaMetadata()); // stop the leader server leaderServer.stopTestServer(); // get the new leader server and run operations. SchemaRegistryTestServerClientWrapper newLeaderServer = leaderSchemaRegistryServer(); Assert.assertNotEquals(leaderPort, newLeaderServer.getLocalPort()); leaderClient = newLeaderServer.getClient(); String receivedSchema = leaderClient.getSchemaVersionInfo(new SchemaVersionKey(schemaName, v1.getVersion())).getSchemaText(); Assert.assertEquals(schema1, receivedSchema); }