HDFS-12772. RBF: Federation Router State State Store internal API. Contributed by Inigo Goiri.
This commit is contained in:
parent
d95c13774e
commit
95743c672e
|
@ -30,6 +30,7 @@ import org.apache.hadoop.hdfs.DFSConfigKeys;
|
||||||
import org.apache.hadoop.hdfs.server.federation.resolver.ActiveNamenodeResolver;
|
import org.apache.hadoop.hdfs.server.federation.resolver.ActiveNamenodeResolver;
|
||||||
import org.apache.hadoop.hdfs.server.federation.resolver.FileSubclusterResolver;
|
import org.apache.hadoop.hdfs.server.federation.resolver.FileSubclusterResolver;
|
||||||
import org.apache.hadoop.hdfs.server.federation.store.StateStoreService;
|
import org.apache.hadoop.hdfs.server.federation.store.StateStoreService;
|
||||||
|
import org.apache.hadoop.util.VersionInfo;
|
||||||
import org.codehaus.jettison.json.JSONArray;
|
import org.codehaus.jettison.json.JSONArray;
|
||||||
import org.codehaus.jettison.json.JSONException;
|
import org.codehaus.jettison.json.JSONException;
|
||||||
import org.codehaus.jettison.json.JSONObject;
|
import org.codehaus.jettison.json.JSONObject;
|
||||||
|
@ -105,6 +106,25 @@ public final class FederationUtil {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch the compile timestamp for this jar.
|
||||||
|
*
|
||||||
|
* @return Date compiled.
|
||||||
|
*/
|
||||||
|
public static String getBuildVersion() {
|
||||||
|
return VersionInfo.getBuildVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetch the build/compile information for this jar.
|
||||||
|
*
|
||||||
|
* @return String Compilation info.
|
||||||
|
*/
|
||||||
|
public static String getCompileInfo() {
|
||||||
|
return VersionInfo.getDate() + " by " + VersionInfo.getUser() + " from "
|
||||||
|
+ VersionInfo.getBranch();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an instance of an interface with a constructor using a context.
|
* Create an instance of an interface with a constructor using a context.
|
||||||
*
|
*
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.router;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* States of the Router.
|
||||||
|
*/
|
||||||
|
public enum RouterServiceState {
|
||||||
|
NONE,
|
||||||
|
INITIALIZING,
|
||||||
|
SAFEMODE,
|
||||||
|
RUNNING,
|
||||||
|
STOPPING,
|
||||||
|
SHUTDOWN,
|
||||||
|
EXPIRED;
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.hadoop.classification.InterfaceAudience;
|
||||||
|
import org.apache.hadoop.classification.InterfaceStability;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreDriver;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetRouterRegistrationRequest;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetRouterRegistrationResponse;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetRouterRegistrationsRequest;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetRouterRegistrationsResponse;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.RouterHeartbeatRequest;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.RouterHeartbeatResponse;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.RouterState;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Management API for
|
||||||
|
* {@link org.apache.hadoop.hdfs.server.federation.store.records.RouterState
|
||||||
|
* RouterState} records in the state store. Accesses the data store via the
|
||||||
|
* {@link org.apache.hadoop.hdfs.server.federation.store.driver.
|
||||||
|
* StateStoreDriver StateStoreDriver} interface. No data is cached.
|
||||||
|
*/
|
||||||
|
@InterfaceAudience.Private
|
||||||
|
@InterfaceStability.Evolving
|
||||||
|
public abstract class RouterStore extends CachedRecordStore<RouterState> {
|
||||||
|
|
||||||
|
public RouterStore(StateStoreDriver driver) {
|
||||||
|
super(RouterState.class, driver, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches the current router state object.
|
||||||
|
*
|
||||||
|
* @param request Fully populated request object.
|
||||||
|
* @return The matching router record or null if none exists.
|
||||||
|
* @throws IOException Throws exception if unable to query the data store or
|
||||||
|
* if more than one matching record is found.
|
||||||
|
*/
|
||||||
|
public abstract GetRouterRegistrationResponse getRouterRegistration(
|
||||||
|
GetRouterRegistrationRequest request) throws IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches all router status objects.
|
||||||
|
*
|
||||||
|
* @param request Fully populated request object.
|
||||||
|
* @return List of Router records present in the data store.
|
||||||
|
* @throws IOException Throws exception if unable to query the data store
|
||||||
|
*/
|
||||||
|
public abstract GetRouterRegistrationsResponse getRouterRegistrations(
|
||||||
|
GetRouterRegistrationsRequest request) throws IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the state of this router in the State Store.
|
||||||
|
*
|
||||||
|
* @param request Fully populated request object.
|
||||||
|
* @return True if the update was successfully recorded, false otherwise.
|
||||||
|
* @throws IOException Throws exception if unable to query the data store
|
||||||
|
*/
|
||||||
|
public abstract RouterHeartbeatResponse routerHeartbeat(
|
||||||
|
RouterHeartbeatRequest request) throws IOException;
|
||||||
|
}
|
|
@ -0,0 +1,93 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.impl;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.hadoop.classification.InterfaceAudience;
|
||||||
|
import org.apache.hadoop.classification.InterfaceStability;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.RouterStore;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreDriver;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetRouterRegistrationRequest;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetRouterRegistrationResponse;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetRouterRegistrationsRequest;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetRouterRegistrationsResponse;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.RouterHeartbeatRequest;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.RouterHeartbeatResponse;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.Query;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.QueryResult;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.RouterState;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of the {@link RouterStore} state store API.
|
||||||
|
*/
|
||||||
|
@InterfaceAudience.Private
|
||||||
|
@InterfaceStability.Evolving
|
||||||
|
public class RouterStoreImpl extends RouterStore {
|
||||||
|
|
||||||
|
public RouterStoreImpl(StateStoreDriver driver) {
|
||||||
|
super(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GetRouterRegistrationResponse getRouterRegistration(
|
||||||
|
GetRouterRegistrationRequest request) throws IOException {
|
||||||
|
|
||||||
|
final RouterState partial = RouterState.newInstance();
|
||||||
|
partial.setAddress(request.getRouterId());
|
||||||
|
final Query<RouterState> query = new Query<RouterState>(partial);
|
||||||
|
RouterState record = getDriver().get(getRecordClass(), query);
|
||||||
|
if (record != null) {
|
||||||
|
overrideExpiredRecord(record);
|
||||||
|
}
|
||||||
|
GetRouterRegistrationResponse response =
|
||||||
|
GetRouterRegistrationResponse.newInstance();
|
||||||
|
response.setRouter(record);
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GetRouterRegistrationsResponse getRouterRegistrations(
|
||||||
|
GetRouterRegistrationsRequest request) throws IOException {
|
||||||
|
|
||||||
|
// Get all values from the cache
|
||||||
|
QueryResult<RouterState> recordsAndTimeStamp =
|
||||||
|
getCachedRecordsAndTimeStamp();
|
||||||
|
List<RouterState> records = recordsAndTimeStamp.getRecords();
|
||||||
|
long timestamp = recordsAndTimeStamp.getTimestamp();
|
||||||
|
|
||||||
|
// Generate response
|
||||||
|
GetRouterRegistrationsResponse response =
|
||||||
|
GetRouterRegistrationsResponse.newInstance();
|
||||||
|
response.setRouters(records);
|
||||||
|
response.setTimestamp(timestamp);
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RouterHeartbeatResponse routerHeartbeat(RouterHeartbeatRequest request)
|
||||||
|
throws IOException {
|
||||||
|
|
||||||
|
RouterState record = request.getRouter();
|
||||||
|
boolean status = getDriver().put(record, true, false);
|
||||||
|
RouterHeartbeatResponse response =
|
||||||
|
RouterHeartbeatResponse.newInstance(status);
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,47 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.protocol;
|
||||||
|
|
||||||
|
import org.apache.hadoop.classification.InterfaceAudience.Public;
|
||||||
|
import org.apache.hadoop.classification.InterfaceStability.Unstable;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API request for retrieving a single router registration present in the state
|
||||||
|
* store.
|
||||||
|
*/
|
||||||
|
public abstract class GetRouterRegistrationRequest {
|
||||||
|
|
||||||
|
public static GetRouterRegistrationRequest newInstance() {
|
||||||
|
return StateStoreSerializer.newRecord(GetRouterRegistrationRequest.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static GetRouterRegistrationRequest newInstance(String routerId) {
|
||||||
|
GetRouterRegistrationRequest request = newInstance();
|
||||||
|
request.setRouterId(routerId);
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Public
|
||||||
|
@Unstable
|
||||||
|
public abstract String getRouterId();
|
||||||
|
|
||||||
|
@Public
|
||||||
|
@Unstable
|
||||||
|
public abstract void setRouterId(String routerId);
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.protocol;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.hadoop.classification.InterfaceAudience.Public;
|
||||||
|
import org.apache.hadoop.classification.InterfaceStability.Unstable;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.RouterState;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API response for retrieving a single router registration present in the state
|
||||||
|
* store.
|
||||||
|
*/
|
||||||
|
public abstract class GetRouterRegistrationResponse {
|
||||||
|
|
||||||
|
public static GetRouterRegistrationResponse newInstance() throws IOException {
|
||||||
|
return StateStoreSerializer.newRecord(GetRouterRegistrationResponse.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Public
|
||||||
|
@Unstable
|
||||||
|
public abstract RouterState getRouter() throws IOException;
|
||||||
|
|
||||||
|
@Public
|
||||||
|
@Unstable
|
||||||
|
public abstract void setRouter(RouterState router) throws IOException;
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.protocol;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API request for retrieving a all non-expired router registrations present in
|
||||||
|
* the state store.
|
||||||
|
*/
|
||||||
|
public abstract class GetRouterRegistrationsRequest {
|
||||||
|
|
||||||
|
public static GetRouterRegistrationsRequest newInstance() throws IOException {
|
||||||
|
return StateStoreSerializer.newRecord(GetRouterRegistrationsRequest.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.protocol;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.hadoop.classification.InterfaceAudience.Public;
|
||||||
|
import org.apache.hadoop.classification.InterfaceStability.Unstable;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.RouterState;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API response for retrieving a all non-expired router registrations present in
|
||||||
|
* the state store.
|
||||||
|
*/
|
||||||
|
public abstract class GetRouterRegistrationsResponse {
|
||||||
|
|
||||||
|
public static GetRouterRegistrationsResponse newInstance()
|
||||||
|
throws IOException {
|
||||||
|
return StateStoreSerializer.newRecord(GetRouterRegistrationsResponse.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Public
|
||||||
|
@Unstable
|
||||||
|
public abstract List<RouterState> getRouters() throws IOException;
|
||||||
|
|
||||||
|
@Public
|
||||||
|
@Unstable
|
||||||
|
public abstract void setRouters(List<RouterState> routers)
|
||||||
|
throws IOException;
|
||||||
|
|
||||||
|
@Public
|
||||||
|
@Unstable
|
||||||
|
public abstract long getTimestamp();
|
||||||
|
|
||||||
|
@Public
|
||||||
|
@Unstable
|
||||||
|
public abstract void setTimestamp(long time);
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.protocol;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.hadoop.classification.InterfaceAudience.Public;
|
||||||
|
import org.apache.hadoop.classification.InterfaceStability.Unstable;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.RouterState;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API request for registering a router with the state store.
|
||||||
|
*/
|
||||||
|
public abstract class RouterHeartbeatRequest {
|
||||||
|
|
||||||
|
public static RouterHeartbeatRequest newInstance() throws IOException {
|
||||||
|
return StateStoreSerializer.newRecord(RouterHeartbeatRequest.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RouterHeartbeatRequest newInstance(RouterState router)
|
||||||
|
throws IOException {
|
||||||
|
RouterHeartbeatRequest request = newInstance();
|
||||||
|
request.setRouter(router);
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Public
|
||||||
|
@Unstable
|
||||||
|
public abstract RouterState getRouter() throws IOException;
|
||||||
|
|
||||||
|
@Public
|
||||||
|
@Unstable
|
||||||
|
public abstract void setRouter(RouterState routerState);
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.protocol;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.hadoop.classification.InterfaceAudience.Public;
|
||||||
|
import org.apache.hadoop.classification.InterfaceStability.Unstable;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API response for registering a router with the state store.
|
||||||
|
*/
|
||||||
|
public abstract class RouterHeartbeatResponse {
|
||||||
|
|
||||||
|
public static RouterHeartbeatResponse newInstance() throws IOException {
|
||||||
|
return StateStoreSerializer.newRecord(RouterHeartbeatResponse.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RouterHeartbeatResponse newInstance(boolean status)
|
||||||
|
throws IOException {
|
||||||
|
RouterHeartbeatResponse response = newInstance();
|
||||||
|
response.setStatus(status);
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Public
|
||||||
|
@Unstable
|
||||||
|
public abstract boolean getStatus();
|
||||||
|
|
||||||
|
@Public
|
||||||
|
@Unstable
|
||||||
|
public abstract void setStatus(boolean result);
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetRouterRegistrationRequestProto;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetRouterRegistrationRequestProto.Builder;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetRouterRegistrationRequestProtoOrBuilder;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetRouterRegistrationRequest;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.impl.pb.PBRecord;
|
||||||
|
|
||||||
|
import com.google.protobuf.Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Protobuf implementation of the state store API object
|
||||||
|
* GetRouterRegistrationRequest.
|
||||||
|
*/
|
||||||
|
public class GetRouterRegistrationRequestPBImpl
|
||||||
|
extends GetRouterRegistrationRequest implements PBRecord {
|
||||||
|
|
||||||
|
private FederationProtocolPBTranslator<GetRouterRegistrationRequestProto,
|
||||||
|
Builder, GetRouterRegistrationRequestProtoOrBuilder> translator =
|
||||||
|
new FederationProtocolPBTranslator<GetRouterRegistrationRequestProto,
|
||||||
|
Builder, GetRouterRegistrationRequestProtoOrBuilder>(
|
||||||
|
GetRouterRegistrationRequestProto.class);
|
||||||
|
|
||||||
|
public GetRouterRegistrationRequestPBImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GetRouterRegistrationRequestProto getProto() {
|
||||||
|
return this.translator.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProto(Message proto) {
|
||||||
|
this.translator.setProto(proto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readInstance(String base64String) throws IOException {
|
||||||
|
this.translator.readInstance(base64String);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getRouterId() {
|
||||||
|
return this.translator.getProtoOrBuilder().getRouterId();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRouterId(String routerId) {
|
||||||
|
this.translator.getBuilder().setRouterId(routerId);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetRouterRegistrationResponseProto;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetRouterRegistrationResponseProto.Builder;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetRouterRegistrationResponseProtoOrBuilder;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RouterRecordProto;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetRouterRegistrationResponse;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.RouterState;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.impl.pb.PBRecord;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.impl.pb.RouterStatePBImpl;
|
||||||
|
|
||||||
|
import com.google.protobuf.Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Protobuf implementation of the state store API object
|
||||||
|
* GetRouterRegistrationResponse.
|
||||||
|
*/
|
||||||
|
public class GetRouterRegistrationResponsePBImpl
|
||||||
|
extends GetRouterRegistrationResponse implements PBRecord {
|
||||||
|
|
||||||
|
private FederationProtocolPBTranslator<GetRouterRegistrationResponseProto,
|
||||||
|
Builder, GetRouterRegistrationResponseProtoOrBuilder> translator =
|
||||||
|
new FederationProtocolPBTranslator<
|
||||||
|
GetRouterRegistrationResponseProto, Builder,
|
||||||
|
GetRouterRegistrationResponseProtoOrBuilder>(
|
||||||
|
GetRouterRegistrationResponseProto.class);
|
||||||
|
|
||||||
|
public GetRouterRegistrationResponsePBImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GetRouterRegistrationResponseProto getProto() {
|
||||||
|
return this.translator.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProto(Message protocol) {
|
||||||
|
this.translator.setProto(protocol);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readInstance(String base64String) throws IOException {
|
||||||
|
this.translator.readInstance(base64String);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RouterState getRouter() {
|
||||||
|
RouterRecordProto proto = this.translator.getProtoOrBuilder().getRouter();
|
||||||
|
return new RouterStatePBImpl(proto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRouter(RouterState router) {
|
||||||
|
if (router instanceof RouterStatePBImpl) {
|
||||||
|
RouterStatePBImpl routerPB = (RouterStatePBImpl)router;
|
||||||
|
RouterRecordProto routerProto = routerPB.getProto();
|
||||||
|
this.translator.getBuilder().setRouter(routerProto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,61 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetRouterRegistrationsRequestProto;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetRouterRegistrationsRequestProto.Builder;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetRouterRegistrationsRequestProtoOrBuilder;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetRouterRegistrationsRequest;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.impl.pb.PBRecord;
|
||||||
|
|
||||||
|
import com.google.protobuf.Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Protobuf implementation of the state store API object
|
||||||
|
* GetRouterRegistrationsRequest.
|
||||||
|
*/
|
||||||
|
public class GetRouterRegistrationsRequestPBImpl
|
||||||
|
extends GetRouterRegistrationsRequest implements PBRecord {
|
||||||
|
|
||||||
|
private FederationProtocolPBTranslator<GetRouterRegistrationsRequestProto,
|
||||||
|
Builder, GetRouterRegistrationsRequestProtoOrBuilder> translator =
|
||||||
|
new FederationProtocolPBTranslator<
|
||||||
|
GetRouterRegistrationsRequestProto, Builder,
|
||||||
|
GetRouterRegistrationsRequestProtoOrBuilder>(
|
||||||
|
GetRouterRegistrationsRequestProto.class);
|
||||||
|
|
||||||
|
public GetRouterRegistrationsRequestPBImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GetRouterRegistrationsRequestProto getProto() {
|
||||||
|
return this.translator.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProto(Message proto) {
|
||||||
|
this.translator.setProto(proto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readInstance(String base64String) throws IOException {
|
||||||
|
this.translator.readInstance(base64String);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,102 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetRouterRegistrationsResponseProto;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetRouterRegistrationsResponseProto.Builder;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.GetRouterRegistrationsResponseProtoOrBuilder;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RouterRecordProto;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.GetRouterRegistrationsResponse;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.RouterState;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.impl.pb.PBRecord;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.impl.pb.RouterStatePBImpl;
|
||||||
|
|
||||||
|
import com.google.protobuf.Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Protobuf implementation of the state store API object
|
||||||
|
* GetRouterRegistrationsResponse.
|
||||||
|
*/
|
||||||
|
public class GetRouterRegistrationsResponsePBImpl
|
||||||
|
extends GetRouterRegistrationsResponse implements PBRecord {
|
||||||
|
|
||||||
|
private FederationProtocolPBTranslator<GetRouterRegistrationsResponseProto,
|
||||||
|
Builder, GetRouterRegistrationsResponseProtoOrBuilder> translator =
|
||||||
|
new FederationProtocolPBTranslator<
|
||||||
|
GetRouterRegistrationsResponseProto, Builder,
|
||||||
|
GetRouterRegistrationsResponseProtoOrBuilder>(
|
||||||
|
GetRouterRegistrationsResponseProto.class);
|
||||||
|
|
||||||
|
public GetRouterRegistrationsResponsePBImpl() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GetRouterRegistrationsResponseProto getProto() {
|
||||||
|
return this.translator.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProto(Message proto) {
|
||||||
|
this.translator.setProto(proto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readInstance(String base64String) throws IOException {
|
||||||
|
this.translator.readInstance(base64String);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<RouterState> getRouters() throws IOException {
|
||||||
|
|
||||||
|
List<RouterState> ret = new ArrayList<RouterState>();
|
||||||
|
List<RouterRecordProto> memberships =
|
||||||
|
this.translator.getProtoOrBuilder().getRoutersList();
|
||||||
|
for (RouterRecordProto memberProto : memberships) {
|
||||||
|
RouterState membership = new RouterStatePBImpl(memberProto);
|
||||||
|
ret.add(membership);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRouters(List<RouterState> records) throws IOException {
|
||||||
|
|
||||||
|
this.translator.getBuilder().clearRouters();
|
||||||
|
for (RouterState router : records) {
|
||||||
|
if (router instanceof RouterStatePBImpl) {
|
||||||
|
RouterStatePBImpl routerPB = (RouterStatePBImpl) router;
|
||||||
|
this.translator.getBuilder().addRouters(routerPB.getProto());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getTimestamp() {
|
||||||
|
return this.translator.getProtoOrBuilder().getTimestamp();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setTimestamp(long time) {
|
||||||
|
this.translator.getBuilder().setTimestamp(time);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RouterHeartbeatRequestProto;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RouterHeartbeatRequestProto.Builder;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RouterHeartbeatRequestProtoOrBuilder;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RouterRecordProto;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.RouterHeartbeatRequest;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.RouterState;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.impl.pb.PBRecord;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.impl.pb.RouterStatePBImpl;
|
||||||
|
|
||||||
|
import com.google.protobuf.Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Protobuf implementation of the state store API object
|
||||||
|
* RouterHeartbeatRequest.
|
||||||
|
*/
|
||||||
|
public class RouterHeartbeatRequestPBImpl extends RouterHeartbeatRequest
|
||||||
|
implements PBRecord {
|
||||||
|
|
||||||
|
private FederationProtocolPBTranslator<RouterHeartbeatRequestProto, Builder,
|
||||||
|
RouterHeartbeatRequestProtoOrBuilder> translator =
|
||||||
|
new FederationProtocolPBTranslator<RouterHeartbeatRequestProto,
|
||||||
|
Builder, RouterHeartbeatRequestProtoOrBuilder>(
|
||||||
|
RouterHeartbeatRequestProto.class);
|
||||||
|
|
||||||
|
public RouterHeartbeatRequestPBImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RouterHeartbeatRequestProto getProto() {
|
||||||
|
return this.translator.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProto(Message proto) {
|
||||||
|
this.translator.setProto(proto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readInstance(String base64String) throws IOException {
|
||||||
|
this.translator.readInstance(base64String);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RouterState getRouter() throws IOException {
|
||||||
|
RouterRecordProto routerProto =
|
||||||
|
this.translator.getProtoOrBuilder().getRouter();
|
||||||
|
return new RouterStatePBImpl(routerProto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setRouter(RouterState routerState) {
|
||||||
|
if (routerState instanceof RouterStatePBImpl) {
|
||||||
|
RouterStatePBImpl routerStatePB = (RouterStatePBImpl)routerState;
|
||||||
|
this.translator.getBuilder().setRouter(routerStatePB.getProto());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,70 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RouterHeartbeatResponseProto;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RouterHeartbeatResponseProto.Builder;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RouterHeartbeatResponseProtoOrBuilder;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.RouterHeartbeatResponse;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.impl.pb.PBRecord;
|
||||||
|
|
||||||
|
import com.google.protobuf.Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Protobuf implementation of the state store API object
|
||||||
|
* RouterHeartbeatResponse.
|
||||||
|
*/
|
||||||
|
public class RouterHeartbeatResponsePBImpl extends RouterHeartbeatResponse
|
||||||
|
implements PBRecord {
|
||||||
|
|
||||||
|
private FederationProtocolPBTranslator<RouterHeartbeatResponseProto, Builder,
|
||||||
|
RouterHeartbeatResponseProtoOrBuilder> translator =
|
||||||
|
new FederationProtocolPBTranslator<RouterHeartbeatResponseProto,
|
||||||
|
Builder, RouterHeartbeatResponseProtoOrBuilder>(
|
||||||
|
RouterHeartbeatResponseProto.class);
|
||||||
|
|
||||||
|
public RouterHeartbeatResponsePBImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RouterHeartbeatResponseProto getProto() {
|
||||||
|
return this.translator.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProto(Message proto) {
|
||||||
|
this.translator.setProto(proto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readInstance(String base64String) throws IOException {
|
||||||
|
this.translator.readInstance(base64String);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean getStatus() {
|
||||||
|
return this.translator.getProtoOrBuilder().getStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setStatus(boolean result) {
|
||||||
|
this.translator.getBuilder().setStatus(result);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,169 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.records;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.SortedMap;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.router.FederationUtil;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.router.RouterServiceState;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entry to log the state of a
|
||||||
|
* {@link org.apache.hadoop.hdfs.server.federation.router.Router Router} in the
|
||||||
|
* {@link org.apache.hadoop.hdfs.server.federation.store.StateStoreService
|
||||||
|
* FederationStateStoreService}.
|
||||||
|
*/
|
||||||
|
public abstract class RouterState extends BaseRecord {
|
||||||
|
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(RouterState.class);
|
||||||
|
|
||||||
|
/** Expiration time in ms for this entry. */
|
||||||
|
private static long expirationMs;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructors.
|
||||||
|
*/
|
||||||
|
public RouterState() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RouterState newInstance() {
|
||||||
|
RouterState record = StateStoreSerializer.newRecord(RouterState.class);
|
||||||
|
record.init();
|
||||||
|
return record;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RouterState newInstance(String addr, long startTime,
|
||||||
|
RouterServiceState status) {
|
||||||
|
RouterState record = newInstance();
|
||||||
|
record.setDateStarted(startTime);
|
||||||
|
record.setAddress(addr);
|
||||||
|
record.setStatus(status);
|
||||||
|
record.setCompileInfo(FederationUtil.getCompileInfo());
|
||||||
|
record.setBuildVersion(FederationUtil.getBuildVersion());
|
||||||
|
return record;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void setAddress(String address);
|
||||||
|
|
||||||
|
public abstract void setDateStarted(long dateStarted);
|
||||||
|
|
||||||
|
public abstract String getAddress();
|
||||||
|
|
||||||
|
public abstract StateStoreVersion getStateStoreVersion() throws IOException;
|
||||||
|
|
||||||
|
public abstract void setStateStoreVersion(StateStoreVersion version);
|
||||||
|
|
||||||
|
public abstract RouterServiceState getStatus();
|
||||||
|
|
||||||
|
public abstract void setStatus(RouterServiceState newStatus);
|
||||||
|
|
||||||
|
public abstract String getBuildVersion();
|
||||||
|
|
||||||
|
public abstract void setBuildVersion(String version);
|
||||||
|
|
||||||
|
public abstract String getCompileInfo();
|
||||||
|
|
||||||
|
public abstract void setCompileInfo(String info);
|
||||||
|
|
||||||
|
public abstract long getDateStarted();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the identifier for the Router. It uses the address.
|
||||||
|
*
|
||||||
|
* @return Identifier for the Router.
|
||||||
|
*/
|
||||||
|
public String getRouterId() {
|
||||||
|
return getAddress();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean like(BaseRecord o) {
|
||||||
|
if (o instanceof RouterState) {
|
||||||
|
RouterState other = (RouterState)o;
|
||||||
|
if (getAddress() != null &&
|
||||||
|
!getAddress().equals(other.getAddress())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (getStatus() != null &&
|
||||||
|
!getStatus().equals(other.getStatus())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return getAddress() + " -> " + getStatus() + "," + getBuildVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SortedMap<String, String> getPrimaryKeys() {
|
||||||
|
SortedMap<String, String> map = new TreeMap<>();
|
||||||
|
map.put("address", getAddress());
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean validate() {
|
||||||
|
boolean ret = super.validate();
|
||||||
|
if ((getAddress() == null || getAddress().length() == 0) &&
|
||||||
|
getStatus() != RouterServiceState.INITIALIZING) {
|
||||||
|
LOG.error("Invalid router entry, no address specified {}", this);
|
||||||
|
ret = false;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(BaseRecord other) {
|
||||||
|
if (other == null) {
|
||||||
|
return -1;
|
||||||
|
} else if (other instanceof RouterState) {
|
||||||
|
RouterState router = (RouterState) other;
|
||||||
|
return this.getAddress().compareTo(router.getAddress());
|
||||||
|
} else {
|
||||||
|
return super.compareTo(other);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean checkExpired(long currentTime) {
|
||||||
|
if (super.checkExpired(currentTime)) {
|
||||||
|
setStatus(RouterServiceState.EXPIRED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getExpirationMs() {
|
||||||
|
return RouterState.expirationMs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setExpirationMs(long time) {
|
||||||
|
RouterState.expirationMs = time;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,91 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.records;
|
||||||
|
|
||||||
|
import java.util.SortedMap;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entry to track the version of the State Store data stored in the State Store
|
||||||
|
* by a Router.
|
||||||
|
*/
|
||||||
|
public abstract class StateStoreVersion extends BaseRecord {
|
||||||
|
|
||||||
|
public static StateStoreVersion newInstance() {
|
||||||
|
return StateStoreSerializer.newRecord(StateStoreVersion.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static StateStoreVersion newInstance(long membershipVersion,
|
||||||
|
long mountTableVersion) {
|
||||||
|
StateStoreVersion record = newInstance();
|
||||||
|
record.setMembershipVersion(membershipVersion);
|
||||||
|
record.setMountTableVersion(mountTableVersion);
|
||||||
|
return record;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract long getMembershipVersion();
|
||||||
|
|
||||||
|
public abstract void setMembershipVersion(long version);
|
||||||
|
|
||||||
|
public abstract long getMountTableVersion();
|
||||||
|
|
||||||
|
public abstract void setMountTableVersion(long version);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SortedMap<String, String> getPrimaryKeys() {
|
||||||
|
// This record is not stored directly, no key needed
|
||||||
|
SortedMap<String, String> map = new TreeMap<String, String>();
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getExpirationMs() {
|
||||||
|
// This record is not stored directly, no expiration needed
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDateModified(long time) {
|
||||||
|
// We don't store this record directly
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getDateModified() {
|
||||||
|
// We don't store this record directly
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDateCreated(long time) {
|
||||||
|
// We don't store this record directly
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getDateCreated() {
|
||||||
|
// We don't store this record directly
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Membership: " + getMembershipVersion() +
|
||||||
|
" Mount Table: " + getMountTableVersion();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,202 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.records.impl.pb;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RouterRecordProto;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RouterRecordProto.Builder;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.RouterRecordProtoOrBuilder;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.StateStoreVersionRecordProto;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.router.RouterServiceState;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.FederationProtocolPBTranslator;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.RouterState;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.StateStoreVersion;
|
||||||
|
|
||||||
|
import com.google.protobuf.Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Protobuf implementation of the RouterState record.
|
||||||
|
*/
|
||||||
|
public class RouterStatePBImpl extends RouterState implements PBRecord {
|
||||||
|
|
||||||
|
private FederationProtocolPBTranslator<RouterRecordProto, Builder,
|
||||||
|
RouterRecordProtoOrBuilder> translator =
|
||||||
|
new FederationProtocolPBTranslator<RouterRecordProto, Builder,
|
||||||
|
RouterRecordProtoOrBuilder>(RouterRecordProto.class);
|
||||||
|
|
||||||
|
public RouterStatePBImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public RouterStatePBImpl(RouterRecordProto proto) {
|
||||||
|
this.translator.setProto(proto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RouterRecordProto getProto() {
|
||||||
|
return this.translator.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProto(Message proto) {
|
||||||
|
this.translator.setProto(proto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readInstance(String base64String) throws IOException {
|
||||||
|
this.translator.readInstance(base64String);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAddress(String address) {
|
||||||
|
RouterRecordProto.Builder builder = this.translator.getBuilder();
|
||||||
|
if (address == null) {
|
||||||
|
builder.clearAddress();
|
||||||
|
} else {
|
||||||
|
builder.setAddress(address);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAddress() {
|
||||||
|
RouterRecordProtoOrBuilder proto = this.translator.getProtoOrBuilder();
|
||||||
|
if (!proto.hasAddress()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return proto.getAddress();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setStateStoreVersion(StateStoreVersion version) {
|
||||||
|
RouterRecordProto.Builder builder = this.translator.getBuilder();
|
||||||
|
if (version instanceof StateStoreVersionPBImpl) {
|
||||||
|
StateStoreVersionPBImpl versionPB = (StateStoreVersionPBImpl)version;
|
||||||
|
StateStoreVersionRecordProto versionProto =
|
||||||
|
(StateStoreVersionRecordProto)versionPB.getProto();
|
||||||
|
builder.setStateStoreVersion(versionProto);
|
||||||
|
} else {
|
||||||
|
builder.clearStateStoreVersion();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StateStoreVersion getStateStoreVersion() throws IOException {
|
||||||
|
RouterRecordProtoOrBuilder proto = this.translator.getProtoOrBuilder();
|
||||||
|
if (!proto.hasStateStoreVersion()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
StateStoreVersionRecordProto versionProto = proto.getStateStoreVersion();
|
||||||
|
StateStoreVersion version =
|
||||||
|
StateStoreSerializer.newRecord(StateStoreVersion.class);
|
||||||
|
if (version instanceof StateStoreVersionPBImpl) {
|
||||||
|
StateStoreVersionPBImpl versionPB = (StateStoreVersionPBImpl)version;
|
||||||
|
versionPB.setProto(versionProto);
|
||||||
|
return versionPB;
|
||||||
|
} else {
|
||||||
|
throw new IOException("Cannot get State Store version");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RouterServiceState getStatus() {
|
||||||
|
RouterRecordProtoOrBuilder proto = this.translator.getProtoOrBuilder();
|
||||||
|
if (!proto.hasStatus()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return RouterServiceState.valueOf(proto.getStatus());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setStatus(RouterServiceState newStatus) {
|
||||||
|
RouterRecordProto.Builder builder = this.translator.getBuilder();
|
||||||
|
if (newStatus == null) {
|
||||||
|
builder.clearStatus();
|
||||||
|
} else {
|
||||||
|
builder.setStatus(newStatus.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getBuildVersion() {
|
||||||
|
RouterRecordProtoOrBuilder proto = this.translator.getProtoOrBuilder();
|
||||||
|
if (!proto.hasBuildVersion()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return proto.getBuildVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBuildVersion(String version) {
|
||||||
|
RouterRecordProto.Builder builder = this.translator.getBuilder();
|
||||||
|
if (version == null) {
|
||||||
|
builder.clearBuildVersion();
|
||||||
|
} else {
|
||||||
|
builder.setBuildVersion(version);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCompileInfo() {
|
||||||
|
RouterRecordProtoOrBuilder proto = this.translator.getProtoOrBuilder();
|
||||||
|
if (!proto.hasCompileInfo()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return proto.getCompileInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCompileInfo(String info) {
|
||||||
|
RouterRecordProto.Builder builder = this.translator.getBuilder();
|
||||||
|
if (info == null) {
|
||||||
|
builder.clearCompileInfo();
|
||||||
|
} else {
|
||||||
|
builder.setCompileInfo(info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDateStarted(long dateStarted) {
|
||||||
|
this.translator.getBuilder().setDateStarted(dateStarted);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getDateStarted() {
|
||||||
|
return this.translator.getProtoOrBuilder().getDateStarted();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDateModified(long time) {
|
||||||
|
this.translator.getBuilder().setDateModified(time);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getDateModified() {
|
||||||
|
return this.translator.getProtoOrBuilder().getDateModified();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDateCreated(long time) {
|
||||||
|
this.translator.getBuilder().setDateCreated(time);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getDateCreated() {
|
||||||
|
return this.translator.getProtoOrBuilder().getDateCreated();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.records.impl.pb;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.StateStoreVersionRecordProto;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.StateStoreVersionRecordProto.Builder;
|
||||||
|
import org.apache.hadoop.hdfs.federation.protocol.proto.HdfsServerFederationProtos.StateStoreVersionRecordProtoOrBuilder;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.protocol.impl.pb.FederationProtocolPBTranslator;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.StateStoreVersion;
|
||||||
|
|
||||||
|
import com.google.protobuf.Message;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Protobuf implementation of the StateStoreVersion record.
|
||||||
|
*/
|
||||||
|
public class StateStoreVersionPBImpl extends StateStoreVersion
|
||||||
|
implements PBRecord {
|
||||||
|
|
||||||
|
private FederationProtocolPBTranslator<StateStoreVersionRecordProto, Builder,
|
||||||
|
StateStoreVersionRecordProtoOrBuilder> translator =
|
||||||
|
new FederationProtocolPBTranslator<StateStoreVersionRecordProto,
|
||||||
|
Builder, StateStoreVersionRecordProtoOrBuilder>(
|
||||||
|
StateStoreVersionRecordProto.class);
|
||||||
|
|
||||||
|
public StateStoreVersionPBImpl() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StateStoreVersionRecordProto getProto() {
|
||||||
|
return this.translator.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setProto(Message proto) {
|
||||||
|
this.translator.setProto(proto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readInstance(String base64String) throws IOException {
|
||||||
|
this.translator.readInstance(base64String);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getMembershipVersion() {
|
||||||
|
return this.translator.getProtoOrBuilder().getMembershipVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMembershipVersion(long version) {
|
||||||
|
this.translator.getBuilder().setMembershipVersion(version);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getMountTableVersion() {
|
||||||
|
return this.translator.getProtoOrBuilder().getMountTableVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setMountTableVersion(long version) {
|
||||||
|
this.translator.getBuilder().setMountTableVersion(version);
|
||||||
|
}
|
||||||
|
}
|
|
@ -172,3 +172,47 @@ message GetMountTableEntriesResponseProto {
|
||||||
optional uint64 timestamp = 2;
|
optional uint64 timestamp = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////
|
||||||
|
// Routers
|
||||||
|
/////////////////////////////////////////////////
|
||||||
|
|
||||||
|
message StateStoreVersionRecordProto {
|
||||||
|
optional uint64 membershipVersion = 1;
|
||||||
|
optional uint64 mountTableVersion = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message RouterRecordProto {
|
||||||
|
optional uint64 dateCreated = 1;
|
||||||
|
optional uint64 dateModified = 2;
|
||||||
|
optional string address = 3;
|
||||||
|
optional string status = 4;
|
||||||
|
optional StateStoreVersionRecordProto stateStoreVersion = 5;
|
||||||
|
optional string buildVersion = 6;
|
||||||
|
optional string compileInfo = 7;
|
||||||
|
optional uint64 dateStarted = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetRouterRegistrationRequestProto {
|
||||||
|
optional string routerId = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetRouterRegistrationResponseProto {
|
||||||
|
optional RouterRecordProto router = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetRouterRegistrationsRequestProto {
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetRouterRegistrationsResponseProto {
|
||||||
|
optional uint64 timestamp = 1;
|
||||||
|
repeated RouterRecordProto routers = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message RouterHeartbeatRequestProto {
|
||||||
|
optional RouterRecordProto router = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message RouterHeartbeatResponseProto {
|
||||||
|
optional bool status = 1;
|
||||||
|
}
|
|
@ -37,6 +37,7 @@ import java.util.Random;
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.hdfs.server.federation.metrics.StateStoreMetrics;
|
import org.apache.hadoop.hdfs.server.federation.metrics.StateStoreMetrics;
|
||||||
import org.apache.hadoop.hdfs.server.federation.resolver.FederationNamenodeServiceState;
|
import org.apache.hadoop.hdfs.server.federation.resolver.FederationNamenodeServiceState;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.router.RouterServiceState;
|
||||||
import org.apache.hadoop.hdfs.server.federation.store.FederationStateStoreTestUtils;
|
import org.apache.hadoop.hdfs.server.federation.store.FederationStateStoreTestUtils;
|
||||||
import org.apache.hadoop.hdfs.server.federation.store.StateStoreService;
|
import org.apache.hadoop.hdfs.server.federation.store.StateStoreService;
|
||||||
import org.apache.hadoop.hdfs.server.federation.store.records.BaseRecord;
|
import org.apache.hadoop.hdfs.server.federation.store.records.BaseRecord;
|
||||||
|
@ -44,6 +45,8 @@ import org.apache.hadoop.hdfs.server.federation.store.records.MembershipState;
|
||||||
import org.apache.hadoop.hdfs.server.federation.store.records.MountTable;
|
import org.apache.hadoop.hdfs.server.federation.store.records.MountTable;
|
||||||
import org.apache.hadoop.hdfs.server.federation.store.records.Query;
|
import org.apache.hadoop.hdfs.server.federation.store.records.Query;
|
||||||
import org.apache.hadoop.hdfs.server.federation.store.records.QueryResult;
|
import org.apache.hadoop.hdfs.server.federation.store.records.QueryResult;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.RouterState;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.records.StateStoreVersion;
|
||||||
import org.junit.AfterClass;
|
import org.junit.AfterClass;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -94,6 +97,10 @@ public class TestStateStoreDriverBase {
|
||||||
return randomString;
|
return randomString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private long generateRandomLong() {
|
||||||
|
return RANDOM.nextLong();
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private <T extends Enum> T generateRandomEnum(Class<T> enumClass) {
|
private <T extends Enum> T generateRandomEnum(Class<T> enumClass) {
|
||||||
int x = RANDOM.nextInt(enumClass.getEnumConstants().length);
|
int x = RANDOM.nextInt(enumClass.getEnumConstants().length);
|
||||||
|
@ -117,6 +124,12 @@ public class TestStateStoreDriverBase {
|
||||||
Map<String, String> destMap = Collections.singletonMap(
|
Map<String, String> destMap = Collections.singletonMap(
|
||||||
generateRandomString(), "/" + generateRandomString());
|
generateRandomString(), "/" + generateRandomString());
|
||||||
return (T) MountTable.newInstance(src, destMap);
|
return (T) MountTable.newInstance(src, destMap);
|
||||||
|
} else if (recordClass == RouterState.class) {
|
||||||
|
RouterState routerState = RouterState.newInstance(generateRandomString(),
|
||||||
|
generateRandomLong(), generateRandomEnum(RouterServiceState.class));
|
||||||
|
StateStoreVersion version = generateFakeRecord(StateStoreVersion.class);
|
||||||
|
routerState.setStateStoreVersion(version);
|
||||||
|
return (T) routerState;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -0,0 +1,85 @@
|
||||||
|
/**
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdfs.server.federation.store.records;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.router.RouterServiceState;
|
||||||
|
import org.apache.hadoop.hdfs.server.federation.store.driver.StateStoreSerializer;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the Router State records.
|
||||||
|
*/
|
||||||
|
public class TestRouterState {
|
||||||
|
|
||||||
|
private static final String ADDRESS = "address";
|
||||||
|
private static final String BUILD_VERSION = "buildVersion";
|
||||||
|
private static final String COMPILE_INFO = "compileInfo";
|
||||||
|
private static final long START_TIME = 100;
|
||||||
|
private static final long DATE_MODIFIED = 200;
|
||||||
|
private static final long DATE_CREATED = 300;
|
||||||
|
private static final long FILE_RESOLVER_VERSION = 500;
|
||||||
|
private static final RouterServiceState STATE = RouterServiceState.RUNNING;
|
||||||
|
|
||||||
|
|
||||||
|
private RouterState generateRecord() throws IOException {
|
||||||
|
RouterState record = RouterState.newInstance(ADDRESS, START_TIME, STATE);
|
||||||
|
record.setBuildVersion(BUILD_VERSION);
|
||||||
|
record.setCompileInfo(COMPILE_INFO);
|
||||||
|
record.setDateCreated(DATE_CREATED);
|
||||||
|
record.setDateModified(DATE_MODIFIED);
|
||||||
|
|
||||||
|
StateStoreVersion version = StateStoreVersion.newInstance();
|
||||||
|
version.setMountTableVersion(FILE_RESOLVER_VERSION);
|
||||||
|
record.setStateStoreVersion(version);
|
||||||
|
return record;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateRecord(RouterState record) throws IOException {
|
||||||
|
assertEquals(ADDRESS, record.getAddress());
|
||||||
|
assertEquals(START_TIME, record.getDateStarted());
|
||||||
|
assertEquals(STATE, record.getStatus());
|
||||||
|
assertEquals(COMPILE_INFO, record.getCompileInfo());
|
||||||
|
assertEquals(BUILD_VERSION, record.getBuildVersion());
|
||||||
|
|
||||||
|
StateStoreVersion version = record.getStateStoreVersion();
|
||||||
|
assertEquals(FILE_RESOLVER_VERSION, version.getMountTableVersion());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetterSetter() throws IOException {
|
||||||
|
RouterState record = generateRecord();
|
||||||
|
validateRecord(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSerialization() throws IOException {
|
||||||
|
|
||||||
|
RouterState record = generateRecord();
|
||||||
|
|
||||||
|
StateStoreSerializer serializer = StateStoreSerializer.getSerializer();
|
||||||
|
String serializedString = serializer.serializeString(record);
|
||||||
|
RouterState newRecord =
|
||||||
|
serializer.deserialize(serializedString, RouterState.class);
|
||||||
|
|
||||||
|
validateRecord(newRecord);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue