private static void putTablespace(Tablespace space, boolean override) { // It is a device to keep the relationship among name, URI, and tablespace 1:1:1. boolean nameExist = SPACES_URIS_MAP.containsKey(space.getName()); boolean uriExist = TABLE_SPACES.containsKey(space.uri); boolean mismatch = nameExist && !SPACES_URIS_MAP.get(space.getName()).equals(space.getUri()); mismatch = mismatch || uriExist && TABLE_SPACES.get(space.uri).equals(space); if (!override && mismatch) { throw new RuntimeException("Name or URI of Tablespace must be unique."); } SPACES_URIS_MAP.put(space.getName(), space.getUri()); // We must guarantee that the same uri results in the same tablespace instance. TABLE_SPACES.put(space.getUri(), space); }
@VisibleForTesting public static Optional<Tablespace> addTableSpaceForTest(Tablespace space) { Tablespace existing; synchronized (SPACES_URIS_MAP) { String scheme = UriUtil.getScheme(space.getUri()); if (!TABLE_SPACE_HANDLERS.containsKey(scheme)) { TABLE_SPACE_HANDLERS.put(scheme, space.getClass()); } // Remove existing one SPACES_URIS_MAP.remove(space.getName()); existing = TABLE_SPACES.remove(space.getUri()); // Add anotherone for test registerTableSpace(space.name, space.uri, space.getConfig(), true, true); } // if there is an existing one, return it. return Optional.fromNullable(existing); }