You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sm...@apache.org on 2013/03/31 08:06:09 UTC
svn commit: r1462883 - in /incubator/ambari/trunk: ./ ambari-agent/
ambari-agent/src/main/python/ambari_agent/ ambari-agent/src/test/python/
ambari-agent/src/test/python/examples/ ambari-server/
ambari-server/conf/unix/ ambari-server/src/main/conf/ amb...
Author: smohanty
Date: Sun Mar 31 06:06:08 2013
New Revision: 1462883
URL: http://svn.apache.org/r1462883
Log:
AMBARI-1754. Add support to ensure that Ambari Server/Agent/Store are all of compatible version. (smohanty)
Added:
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariServerTest.java
incubator/ambari/trunk/version
Modified:
incubator/ambari/trunk/CHANGES.txt
incubator/ambari/trunk/ambari-agent/pom.xml
incubator/ambari/trunk/ambari-agent/src/main/python/ambari_agent/Controller.py
incubator/ambari/trunk/ambari-agent/src/main/python/ambari_agent/Register.py
incubator/ambari/trunk/ambari-agent/src/test/python/TestRegistration.py
incubator/ambari/trunk/ambari-agent/src/test/python/examples/ControllerTester.py
incubator/ambari/trunk/ambari-server/conf/unix/ambari.properties
incubator/ambari/trunk/ambari-server/pom.xml
incubator/ambari/trunk/ambari-server/src/main/conf/ambari.properties
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
incubator/ambari/trunk/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
incubator/ambari/trunk/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/LocalAgentSimulator.java
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaServiceTest.java
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
Modified: incubator/ambari/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/CHANGES.txt?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/CHANGES.txt (original)
+++ incubator/ambari/trunk/CHANGES.txt Sun Mar 31 06:06:08 2013
@@ -12,6 +12,9 @@ Trunk (unreleased changes):
NEW FEATURES
+ AMBARI-1754. Add support to ensure that Ambari Server/Agent/Store are all of
+ compatible version. (smohanty)
+
AMBARI-1752. Backend support for MySQL and Oracle for Oozie and Hive. (swagle)
AMBARI-1751. Ambari oracle-linux as a supported OS type. (swagle)
Modified: incubator/ambari/trunk/ambari-agent/pom.xml
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-agent/pom.xml?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-agent/pom.xml (original)
+++ incubator/ambari/trunk/ambari-agent/pom.xml Sun Mar 31 06:06:08 2013
@@ -289,6 +289,17 @@
</source>
</sources>
</mapping>
+ <mapping>
+ <directory>/var/lib/${project.artifactId}/data</directory>
+ <filemode>755</filemode>
+ <username>root</username>
+ <groupname>root</groupname>
+ <sources>
+ <source>
+ <location>../version</location>
+ </source>
+ </sources>
+ </mapping>
<!-- -->
</mappings>
</configuration>
Modified: incubator/ambari/trunk/ambari-agent/src/main/python/ambari_agent/Controller.py
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-agent/src/main/python/ambari_agent/Controller.py?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-agent/src/main/python/ambari_agent/Controller.py (original)
+++ incubator/ambari/trunk/ambari-agent/src/main/python/ambari_agent/Controller.py Sun Mar 31 06:06:08 2013
@@ -66,7 +66,7 @@ class Controller(threading.Thread):
def start(self):
self.actionQueue = ActionQueue(self.config)
self.actionQueue.start()
- self.register = Register()
+ self.register = Register(self.config)
self.heartbeat = Heartbeat(self.actionQueue)
pass
Modified: incubator/ambari/trunk/ambari-agent/src/main/python/ambari_agent/Register.py
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-agent/src/main/python/ambari_agent/Register.py?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-agent/src/main/python/ambari_agent/Register.py (original)
+++ incubator/ambari/trunk/ambari-agent/src/main/python/ambari_agent/Register.py Sun Mar 31 06:06:08 2013
@@ -18,7 +18,7 @@ See the License for the specific languag
limitations under the License.
'''
-import sys
+import sys, os
import json
from Hardware import Hardware
from ActionQueue import ActionQueue
@@ -34,8 +34,9 @@ firstContact = True
class Register:
""" Registering with the server. Get the hardware profile and
declare success for now """
- def __init__(self):
+ def __init__(self, config):
self.hardware = Hardware()
+ self.config = config
def build(self, id='-1'):
global clusterId, clusterDefinitionRevision, firstContact
@@ -44,16 +45,28 @@ class Register:
hostInfo = HostInfo()
agentEnv = { }
hostInfo.register(agentEnv)
+
+ version = self.read_agent_version()
register = { 'responseId' : int(id),
'timestamp' : timestamp,
'hostname' : hostname.hostname(),
'publicHostname' : hostname.public_hostname(),
'hardwareProfile' : self.hardware.get(),
- 'agentEnv' : agentEnv
+ 'agentEnv' : agentEnv,
+ 'agentVersion' : version
}
return register
+ def read_agent_version(self):
+ data_dir = self.config.get('agent', 'prefix')
+ ver_file = os.path.join(data_dir, 'version')
+ f = open(ver_file, "r")
+ version = f.read()
+ f.close()
+ return version
+
+
def doExec(vals, key, command, preLF=False):
template = "{0}: {1} {2}"
try:
@@ -95,14 +108,3 @@ def machineInfo():
doExec(vals, "yum_repos", ["sh", "-c", "yum -C repolist enabled | egrep \"(AMBARI|HDP)\""], True)
# for SUSE-based agents
doExec(vals, "zypper_repos", ["sh", "-c", "zypper repos | egrep \"(AMBARI|HDP)\""], True)
-
-
-def main(argv=None):
- if len(argv) == 1:
- register = Register()
- print json.dumps(register.build())
- else:
- machineInfo()
-
-if __name__ == '__main__':
- main(sys.argv)
Modified: incubator/ambari/trunk/ambari-agent/src/test/python/TestRegistration.py
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-agent/src/test/python/TestRegistration.py?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-agent/src/test/python/TestRegistration.py (original)
+++ incubator/ambari/trunk/ambari-agent/src/test/python/TestRegistration.py Sun Mar 31 06:06:08 2013
@@ -19,14 +19,25 @@ limitations under the License.
'''
from unittest import TestCase
+import os
+import tempfile
+
from ambari_agent.Register import Register
-import socket
-import os, pprint, json
+from ambari_agent.AmbariConfig import AmbariConfig
+
class TestRegistration(TestCase):
def test_registration_build(self):
- register = Register()
+ config = AmbariConfig().getConfig()
+ tmpdir = tempfile.gettempdir()
+ config.set('agent', 'prefix', tmpdir)
+
+ ver_file = os.path.join(tmpdir, "version")
+ with open(ver_file, "w") as text_file:
+ text_file.write("1.3.0")
+
+ register = Register(config)
data = register.build(1)
#print ("Register: " + pprint.pformat(data))
self.assertEquals(len(data['hardwareProfile']) > 0, True, "hardwareProfile should contain content")
@@ -35,4 +46,7 @@ class TestRegistration(TestCase):
self.assertEquals(data['responseId'], 1)
self.assertEquals(data['timestamp'] > 1353678475465L, True, "timestamp should not be empty")
self.assertEquals(len(data['agentEnv']) > 0, True, "agentEnv should not be empty")
- self.assertEquals(len(data), 6)
+ self.assertEquals(data['agentVersion'], '1.3.0', "agentVersion should not be empty")
+ self.assertEquals(len(data), 7)
+
+ os.remove(ver_file)
\ No newline at end of file
Modified: incubator/ambari/trunk/ambari-agent/src/test/python/examples/ControllerTester.py
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-agent/src/test/python/examples/ControllerTester.py?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-agent/src/test/python/examples/ControllerTester.py (original)
+++ incubator/ambari/trunk/ambari-agent/src/test/python/examples/ControllerTester.py Sun Mar 31 06:06:08 2013
@@ -13,7 +13,9 @@ logger=logging.getLogger()
queue = Queue.Queue()
# Set to True to replace python and puppet calls with mockups
-disable_python_and_puppet = False
+disable_python_and_puppet = True
+
+agent_version = "1.3.0"
# Values from the list below are returned in responce to agent requests (one per
# request). When every value has been returned, the last element of list is
@@ -127,14 +129,17 @@ def run_simulation():
os.pardir, 'main', 'upgrade_stack')
config.set('stack', 'upgradeScriptsDir', scriptsDir)
+ ver_file = os.path.join(tmpfile, "version")
+
+ with open(ver_file, "w") as text_file:
+ text_file.write(agent_version)
+
controller = Controller.Controller(config)
controller.sendRequest = sendRequest_method
controller.netutil.HEARTBEAT_IDDLE_INTERVAL_SEC = 0.1
controller.netutil.HEARTBEAT_NOT_IDDLE_INTERVAL_SEC = 0.1
controller.range = 1
-
-
for responce in responces:
queue.put(responce)
Modified: incubator/ambari/trunk/ambari-server/conf/unix/ambari.properties
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/conf/unix/ambari.properties?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/conf/unix/ambari.properties (original)
+++ incubator/ambari/trunk/ambari-server/conf/unix/ambari.properties Sun Mar 31 06:06:08 2013
@@ -21,6 +21,7 @@ resources.dir = /var/lib/ambari-server/r
jdk.url=http://public-repo-1.hortonworks.com/ARTIFACTS/jdk-6u31-linux-x64.bin
jce_policy.url=http://public-repo-1.hortonworks.com/ARTIFACTS/jce_policy-6.zip
metadata.path=/var/lib/ambari-server/resources/stacks
+server.version.file=/var/lib/ambari-server/resources/version
webapp.dir=/usr/lib/ambari-server/web
bootstrap.dir=/var/run/ambari-server/bootstrap
bootstrap.script=/usr/lib/python2.6/site-packages/ambari_server/bootstrap.py
Modified: incubator/ambari/trunk/ambari-server/pom.xml
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/pom.xml?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/pom.xml (original)
+++ incubator/ambari/trunk/ambari-server/pom.xml Sun Mar 31 06:06:08 2013
@@ -78,6 +78,24 @@
</excludes>
</configuration>
</plugin>
+ <!--<plugin>-->
+ <!-- Will be used for DDL file update on server version update-->
+ <!--<artifactId>maven-antrun-plugin</artifactId>-->
+ <!--<executions>-->
+ <!--<execution>-->
+ <!--<id>Copy-server-version-file</id>-->
+ <!--<phase>process-test-resources</phase>-->
+ <!--<configuration>-->
+ <!--<tasks>-->
+ <!--<copy file="../version" todir="${project.build.directory}/"/>-->
+ <!--</tasks>-->
+ <!--</configuration>-->
+ <!--<goals>-->
+ <!--<goal>run</goal>-->
+ <!--</goals>-->
+ <!--</execution>-->
+ <!--</executions>-->
+ <!--</plugin>-->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>rpm-maven-plugin</artifactId>
@@ -316,6 +334,17 @@
</source>
</sources>
</mapping>
+ <mapping>
+ <directory>/var/lib/ambari-server/resources</directory>
+ <filemode>755</filemode>
+ <username>root</username>
+ <groupname>root</groupname>
+ <sources>
+ <source>
+ <location>../version</location>
+ </source>
+ </sources>
+ </mapping>
</mappings>
</configuration>
</plugin>
Modified: incubator/ambari/trunk/ambari-server/src/main/conf/ambari.properties
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/conf/ambari.properties?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/main/conf/ambari.properties (original)
+++ incubator/ambari/trunk/ambari-server/src/main/conf/ambari.properties Sun Mar 31 06:06:08 2013
@@ -15,4 +15,5 @@
# 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.
-metadata.path=src/main/resources/stacks
\ No newline at end of file
+metadata.path=src/main/resources/stacks
+server.version.file=../version
\ No newline at end of file
Modified: incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java (original)
+++ incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java Sun Mar 31 06:06:08 2013
@@ -36,6 +36,7 @@ import org.apache.ambari.server.state.sv
import org.apache.ambari.server.state.svccomphost.ServiceComponentHostOpInProgressEvent;
import org.apache.ambari.server.state.svccomphost.ServiceComponentHostOpSucceededEvent;
import org.apache.ambari.server.utils.StageUtils;
+import org.apache.ambari.server.utils.VersionUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -384,6 +385,21 @@ public class HeartBeatHandler {
String hostname = register.getHostname();
long now = System.currentTimeMillis();
+ String agentVersion = register.getAgentVersion();
+ String serverVersion = ambariMetaInfo.getServerVersion();
+ if (!VersionUtils.areVersionsCompatible(serverVersion, agentVersion)) {
+ LOG.warn("Received registration request from host with non compatible"
+ + " agent version"
+ + ", hostname=" + hostname
+ + ", agentVersion=" + agentVersion
+ + ", serverVersion=" + serverVersion);
+ throw new AmbariException("Cannot register host with non compatible"
+ + " agent version"
+ + ", hostname=" + hostname
+ + ", agentVersion=" + agentVersion
+ + ", serverVersion=" + serverVersion);
+ }
+
String agentOsType = getOsType(register.getHardwareProfile().getOS(),
register.getHardwareProfile().getOSRelease());
if (!ambariMetaInfo.areOsTypesCompatible(
Modified: incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java (original)
+++ incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaInfo.java Sun Mar 31 06:06:08 2013
@@ -25,7 +25,9 @@ import org.apache.ambari.server.AmbariEx
import org.apache.ambari.server.ObjectNotFoundException;
import org.apache.ambari.server.StackAccessException;
import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.resources.ResourceManager;
import org.apache.ambari.server.state.*;
+import org.apache.ambari.server.state.Stack;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.*;
@@ -37,12 +39,7 @@ import javax.xml.parsers.ParserConfigura
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
/**
* ServiceInfo responsible getting information about cluster.
@@ -50,8 +47,10 @@ import java.util.Set;
@Singleton
public class AmbariMetaInfo {
+ private String serverVersion = "undefined";
private List<StackInfo> stacksResult = new ArrayList<StackInfo>();
private File stackRoot;
+ private File serverVersionFile;
private final static Logger LOG = LoggerFactory
.getLogger(AmbariMetaInfo.class);
@@ -104,13 +103,16 @@ public class AmbariMetaInfo {
*/
@Inject
public AmbariMetaInfo(Configuration conf) throws Exception {
- String stackPath = conf.getMetadataPath();
- this.stackRoot = new File(stackPath);
+ String stackPath = conf.getMetadataPath();
+ String serverVersionFilePath = conf.getServerVersionFilePath();
+ this.stackRoot = new File(stackPath);
+ this.serverVersionFile = new File(serverVersionFilePath);
}
@Inject
- public AmbariMetaInfo(File stackRoot) throws Exception {
- this.stackRoot = stackRoot;
+ public AmbariMetaInfo(File stackRoot, File serverVersionFile) throws Exception {
+ this.stackRoot = stackRoot;
+ this.serverVersionFile = serverVersionFile;
}
@@ -121,6 +123,7 @@ public class AmbariMetaInfo {
*/
@Inject
public void init() throws Exception {
+ readServerVersion();
getConfigurationInformation(stackRoot);
}
@@ -587,8 +590,16 @@ public class AmbariMetaInfo {
return resultOperatingSystem;
}
-
-
+
+ private void readServerVersion() throws Exception{
+ File versionFile = this.serverVersionFile;
+ String t = (new File(".")).getAbsolutePath();
+ if (! versionFile.exists()) {
+ throw new AmbariException("Server version file does not exist");
+ }
+ serverVersion = new Scanner(versionFile).useDelimiter("\\Z").next();
+ }
+
private void getConfigurationInformation(File stackRoot) throws Exception {
if (LOG.isDebugEnabled()) {
@@ -676,6 +687,10 @@ public class AmbariMetaInfo {
}
}
+ public String getServerVersion() {
+ return serverVersion;
+ }
+
private StackInfo getStackInfo(File stackVersionFolder) {
StackInfo stackInfo = new StackInfo();
Modified: incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java (original)
+++ incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java Sun Mar 31 06:06:08 2013
@@ -67,6 +67,8 @@ public class Configuration {
public static final String PASSPHRASE_KEY = "security.server.passphrase";
public static final String RESOURCES_DIR_KEY = "resources.dir";
public static final String METADETA_DIR_PATH = "metadata.path";
+ public static final String SERVER_VERSION_FILE = "server.version.file";
+ public static final String SERVER_VERSION_KEY = "version";
public static final String CLIENT_SECURITY_KEY = "client.security";
@@ -358,6 +360,10 @@ public class Configuration {
return properties.getProperty(METADETA_DIR_PATH);
}
+ public String getServerVersionFilePath() {
+ return properties.getProperty(SERVER_VERSION_FILE);
+ }
+
/**
* Check to see if the API should be authenticated or not
* @return false if not, true if the authentication is enabled.
Modified: incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java (original)
+++ incubator/ambari/trunk/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java Sun Mar 31 06:06:08 2013
@@ -36,6 +36,7 @@ import org.apache.ambari.server.bootstra
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.orm.GuiceJpaInitializer;
import org.apache.ambari.server.orm.PersistenceType;
+import org.apache.ambari.server.orm.dao.MetainfoDAO;
import org.apache.ambari.server.resources.ResourceManager;
import org.apache.ambari.server.resources.api.rest.GetResource;
import org.apache.ambari.server.security.CertificateManager;
@@ -96,6 +97,8 @@ public class AmbariServer {
Injector injector;
@Inject
AmbariMetaInfo ambariMetaInfo;
+ @Inject
+ MetainfoDAO metainfoDAO;
public String getServerOsType() {
return configs.getServerOsType();
@@ -114,6 +117,8 @@ public class AmbariServer {
server = new Server();
serverForAgent = new Server();
+ checkDBVersion();
+
try {
ClassPathXmlApplicationContext parentSpringAppContext =
new ClassPathXmlApplicationContext();
@@ -371,6 +376,21 @@ public class AmbariServer {
}
}
+ protected void checkDBVersion() throws AmbariException {
+ LOG.info("Checking DB store version");
+ String databaseVersion = metainfoDAO.findByKey(Configuration.SERVER_VERSION_KEY).getMetainfoValue();
+ String serverVersion = ambariMetaInfo.getServerVersion();
+ if (! databaseVersion.equals(serverVersion)) {
+ String error = "Current database store version is not compatible with " +
+ "current server version"
+ + ", serverVersion=" + serverVersion
+ + ", databaseVersion=" + databaseVersion;
+ LOG.warn(error);
+ throw new AmbariException(error);
+ }
+ LOG.info("DB store version is compatible");
+ }
+
public void stop() throws Exception {
try {
server.stop();
Modified: incubator/ambari/trunk/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql (original)
+++ incubator/ambari/trunk/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql Sun Mar 31 06:06:08 2013
@@ -115,7 +115,7 @@ GRANT ALL PRIVILEGES ON TABLE ambari.key
CREATE TABLE ambari.hostconfigmapping (cluster_id bigint NOT NULL, host_name VARCHAR(255) NOT NULL, type_name VARCHAR(255) NOT NULL, version_tag VARCHAR(255) NOT NULL, service_name VARCHAR(255), create_timestamp BIGINT NOT NULL, selected INTEGER NOT NULL DEFAULT 0, PRIMARY KEY (cluster_id, host_name, type_name, create_timestamp));
GRANT ALL PRIVILEGES ON TABLE ambari.hostconfigmapping TO :username;
-CREATE TABLE ambari.metainfo ("metadata_name" VARCHAR(255), "metadata_value" VARCHAR, PRIMARY KEY("metadata_name"));
+CREATE TABLE ambari.metainfo ("metainfo_key" VARCHAR(255), "metainfo_value" VARCHAR, PRIMARY KEY("metainfo_key"));
GRANT ALL PRIVILEGES ON TABLE ambari.metainfo TO :username;
ALTER TABLE ambari.clusterconfig ADD CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES ambari.clusters (cluster_id);
@@ -172,7 +172,7 @@ select 'admin','538916f8943ec225d97a9a86
insert into ambari.user_roles(role_name, user_id)
select 'admin',(select user_id from ambari.users where user_name='admin' and ldap_user=false);
-insert into ambari.metainfo(metadata_name, metadata_value)
+insert into ambari.metainfo(metainfo_key, metainfo_value)
select 'version','1.3.0';
COMMIT;
Modified: incubator/ambari/trunk/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql (original)
+++ incubator/ambari/trunk/ambari-server/src/main/resources/upgrade/ddl/Ambari-DDL-Postgres-UPGRADE-1.3.0.sql Sun Mar 31 06:06:08 2013
@@ -25,7 +25,7 @@ ALTER TABLE ambari.hosts
ALTER TABLE ambari.clusterstate
ADD COLUMN current_stack_version VARCHAR(255) NOT NULL;
-CREATE TABLE ambari.metainfo ("metadata_name" VARCHAR(255), "metadata_value" VARCHAR, PRIMARY KEY("metadata_name"));
+CREATE TABLE ambari.metainfo ("metainfo_key" VARCHAR(255), "metainfo_value" VARCHAR, PRIMARY KEY("metainfo_key"));
GRANT ALL PRIVILEGES ON TABLE ambari.metainfo TO :username;
CREATE TABLE ambari.clusterconfigmapping (cluster_id bigint NOT NULL, type_name VARCHAR(255) NOT NULL, version_tag VARCHAR(255) NOT NULL, create_timestamp BIGINT NOT NULL, selected INTEGER NOT NULL DEFAULT 0, PRIMARY KEY (cluster_id, type_name, create_timestamp));
@@ -44,7 +44,7 @@ ALTER TABLE ambari.stage ADD COLUMN requ
BEGIN;
-insert into ambari.metainfo(metadata_name, metadata_value)
+insert into ambari.metainfo(metainfo_key, metainfo_value)
select 'version','1.3.0';
COMMIT;
Modified: incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/LocalAgentSimulator.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/LocalAgentSimulator.java?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/LocalAgentSimulator.java (original)
+++ incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/LocalAgentSimulator.java Sun Mar 31 06:06:08 2013
@@ -36,6 +36,7 @@ public class LocalAgentSimulator impleme
private long responseId = 1;
private String hostname = "localhost";
+ private String agentVersion = "1.3.0";
public LocalAgentSimulator(HeartBeatHandler hbh) {
this.handler = hbh;
@@ -95,6 +96,7 @@ public class LocalAgentSimulator impleme
reg = new Register();
reg.setTimestamp(System.currentTimeMillis());
reg.setHostname(this.hostname);
+ reg.setAgentVersion(this.agentVersion);
}
RegistrationResponse response;
try {
Modified: incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java (original)
+++ incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java Sun Mar 31 06:06:08 2013
@@ -139,6 +139,7 @@ public class TestHeartbeatHandler {
hi.setOSRelease(DummyOSRelease);
reg.setHostname(DummyHostname1);
reg.setHardwareProfile(hi);
+ reg.setAgentVersion(metaInfo.getServerVersion());
handler.handleRegistration(reg);
hostObject.setState(HostState.UNHEALTHY);
@@ -424,6 +425,7 @@ public class TestHeartbeatHandler {
hi.setOS(DummyOsType);
reg.setHostname(DummyHostname1);
reg.setHardwareProfile(hi);
+ reg.setAgentVersion(metaInfo.getServerVersion());
handler.handleRegistration(reg);
assertEquals(hostObject.getState(), HostState.HEALTHY);
assertEquals(DummyOsType, hostObject.getOsType());
@@ -450,6 +452,7 @@ public class TestHeartbeatHandler {
reg.setHostname(DummyHostname1);
reg.setHardwareProfile(hi);
reg.setPublicHostname(DummyHostname1 + "-public");
+ reg.setAgentVersion(metaInfo.getServerVersion());
handler.handleRegistration(reg);
assertEquals(hostObject.getState(), HostState.HEALTHY);
assertEquals(DummyOsType, hostObject.getOsType());
@@ -480,6 +483,7 @@ public class TestHeartbeatHandler {
hi.setOS("MegaOperatingSystem");
reg.setHostname(DummyHostname1);
reg.setHardwareProfile(hi);
+ reg.setAgentVersion(metaInfo.getServerVersion());
try {
handler.handleRegistration(reg);
fail ("Expected failure for non matching os type");
@@ -488,6 +492,34 @@ public class TestHeartbeatHandler {
}
}
+ @Test
+ public void testIncompatibleAgentRegistration() throws AmbariException,
+ InvalidStateTransitionException {
+
+ ActionManager am = getMockActionManager();
+ Clusters fsm = clusters;
+ HeartBeatHandler handler = new HeartBeatHandler(fsm, new ActionQueue(), am,
+ injector);
+ clusters.addHost(DummyHostname1);
+ Host hostObject = clusters.getHost(DummyHostname1);
+ hostObject.setIPv4("ipv4");
+ hostObject.setIPv6("ipv6");
+
+ Register reg = new Register();
+ HostInfo hi = new HostInfo();
+ hi.setHostName(DummyHostname1);
+ hi.setOS(DummyOsType);
+ reg.setHostname(DummyHostname1);
+ reg.setHardwareProfile(hi);
+ reg.setAgentVersion("0.0.0"); // Invalid agent version
+ try {
+ handler.handleRegistration(reg);
+ fail ("Expected failure for non compatible agent version");
+ } catch (AmbariException e) {
+ // Expected
+ }
+ }
+
@Test
public void testRegisterNewNode()
@@ -507,6 +539,7 @@ public class TestHeartbeatHandler {
hi.setOS("redhat5");
reg.setHostname(DummyHostname1);
reg.setHardwareProfile(hi);
+ reg.setAgentVersion(metaInfo.getServerVersion());
RegistrationResponse response = handler.handleRegistration(reg);
assertEquals(hostObject.getState(), HostState.HEALTHY);
@@ -530,6 +563,7 @@ public class TestHeartbeatHandler {
hi.setHostName(DummyHostname1);
hi.setOS("redhat5");
register.setHardwareProfile(hi);
+ register.setAgentVersion(metaInfo.getServerVersion());
RegistrationResponse registrationResponse = heartBeatHandler.handleRegistration(register);
assertEquals("ResponseId should start from zero", 0L, registrationResponse.getResponseId());
@@ -597,6 +631,7 @@ public class TestHeartbeatHandler {
hi.setOS(DummyOsType);
reg.setHostname(DummyHostname1);
reg.setHardwareProfile(hi);
+ reg.setAgentVersion(metaInfo.getServerVersion());
RegistrationResponse registrationResponse = handler.handleRegistration(reg);
registrationResponse.getStatusCommands();
assertTrue(registrationResponse.getStatusCommands().size() == 1);
@@ -1081,6 +1116,7 @@ public class TestHeartbeatHandler {
reg.setHostname(DummyHostname1);
reg.setResponseId(0);
reg.setHardwareProfile(hi);
+ reg.setAgentVersion(metaInfo.getServerVersion());
handler.handleRegistration(reg);
return handler;
}
Modified: incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java (original)
+++ incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java Sun Mar 31 06:06:08 2013
@@ -111,6 +111,7 @@ public class TestHeartbeatMonitor {
reg.setHostname(hostname1);
reg.setResponseId(12);
reg.setTimestamp(System.currentTimeMillis() - 300);
+ reg.setAgentVersion(ambariMetaInfo.getServerVersion());
HostInfo hi = new HostInfo();
hi.setOS("Centos5");
reg.setHardwareProfile(hi);
@@ -180,6 +181,7 @@ public class TestHeartbeatMonitor {
reg.setHostname(hostname1);
reg.setResponseId(12);
reg.setTimestamp(System.currentTimeMillis() - 15);
+ reg.setAgentVersion(ambariMetaInfo.getServerVersion());
HostInfo hi = new HostInfo();
hi.setOS("Centos5");
reg.setHardwareProfile(hi);
@@ -223,6 +225,7 @@ public class TestHeartbeatMonitor {
reg.setHostname(hostname);
reg.setResponseId(12);
reg.setTimestamp(System.currentTimeMillis() - 300);
+ reg.setAgentVersion(ambariMetaInfo.getServerVersion());
HostInfo hi = new HostInfo();
hi.setOS("Centos5");
reg.setHardwareProfile(hi);
Modified: incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java (original)
+++ incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java Sun Mar 31 06:06:08 2013
@@ -81,7 +81,7 @@ public class AmbariMetaInfoTest {
public void before() throws Exception {
File stackRoot = new File("src/test/resources/stacks");
LOG.info("Stacks file " + stackRoot.getAbsolutePath());
- metaInfo = new AmbariMetaInfo(stackRoot);
+ metaInfo = new AmbariMetaInfo(stackRoot, new File("../version"));
try {
metaInfo.init();
} catch(Exception e) {
@@ -246,7 +246,7 @@ public class AmbariMetaInfoTest {
File stackRoot = new File("src/test/resources/stacks");
File stackRootTmp = new File(buildDir + "/ambari-metaInfo"); stackRootTmp.mkdir();
FileUtils.copyDirectory(stackRoot, stackRootTmp);
- AmbariMetaInfo ambariMetaInfo = new AmbariMetaInfo(stackRootTmp);
+ AmbariMetaInfo ambariMetaInfo = new AmbariMetaInfo(stackRootTmp, new File("../version"));
File f1, f2, f3;
f1 = new File(stackRootTmp.getAbsolutePath() + "/001.svn"); f1.createNewFile();
f2 = new File(stackRootTmp.getAbsolutePath() + "/abcd.svn/001.svn"); f2.mkdirs(); f2.createNewFile();
Modified: incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaServiceTest.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaServiceTest.java?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaServiceTest.java (original)
+++ incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaServiceTest.java Sun Mar 31 06:06:08 2013
@@ -67,7 +67,7 @@ public class AmbariMetaServiceTest exten
AmbariMetaInfo ambariMetaInfo;
public MockModule() throws Exception {
- this.ambariMetaInfo = new AmbariMetaInfo(stackRoot);
+ this.ambariMetaInfo = new AmbariMetaInfo(stackRoot, new File("../version"));
}
@Override
Modified: incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java (original)
+++ incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java Sun Mar 31 06:06:08 2013
@@ -1477,6 +1477,8 @@ public class AmbariManagementControllerI
properties.setProperty(Configuration.PERSISTENCE_IN_MEMORY_KEY, "true");
properties.setProperty(Configuration.METADETA_DIR_PATH,
"src/main/resources/stacks");
+ properties.setProperty(Configuration.SERVER_VERSION_FILE,
+ "../version");
properties.setProperty(Configuration.OS_VERSION_KEY,
"centos5");
try {
Added: incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariServerTest.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariServerTest.java?rev=1462883&view=auto
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariServerTest.java (added)
+++ incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariServerTest.java Sun Mar 31 06:06:08 2013
@@ -0,0 +1,80 @@
+package org.apache.ambari.server.controller;
+
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
+import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.orm.dao.MetainfoDAO;
+import org.apache.ambari.server.orm.entities.MetainfoEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.easymock.EasyMock.*;
+import static org.junit.Assert.fail;
+
+public class AmbariServerTest {
+
+ private static final Logger log = LoggerFactory.getLogger(AmbariServerTest.class);
+ private Injector injector;
+
+ @Inject
+ private AmbariMetaInfo ambariMetaInfo;
+
+ @Before
+ public void setup() throws Exception {
+ injector = Guice.createInjector(new InMemoryDefaultTestModule());
+ injector.injectMembers(this);
+ }
+
+ @After
+ public void teardown() throws AmbariException {
+ }
+
+ @Test
+ public void testCheckDBVersion_Valid() throws Exception {
+ MetainfoDAO metainfoDAO = createMock(MetainfoDAO.class);
+ MetainfoEntity metainfoEntity = new MetainfoEntity();
+ String serverVersion = ambariMetaInfo.getServerVersion();
+ metainfoEntity.setMetainfoName(Configuration.SERVER_VERSION_KEY);
+ metainfoEntity.setMetainfoValue(serverVersion);
+ expect(metainfoDAO.findByKey(Configuration.SERVER_VERSION_KEY)).
+ andReturn(metainfoEntity);
+ replay(metainfoDAO);
+ AmbariServer ambariServer = new AmbariServer();
+ ambariServer.metainfoDAO = metainfoDAO;
+ ambariServer.ambariMetaInfo = ambariMetaInfo;
+ ambariServer.checkDBVersion();
+ }
+
+ @Test
+ public void testCheckDBVersion_Invalid() throws Exception {
+ MetainfoDAO metainfoDAO = createMock(MetainfoDAO.class);
+ MetainfoEntity metainfoEntity = new MetainfoEntity();
+ metainfoEntity.setMetainfoName(Configuration.SERVER_VERSION_KEY);
+ metainfoEntity.setMetainfoValue("0.0.0"); // Incompatible version
+ expect(metainfoDAO.findByKey(Configuration.SERVER_VERSION_KEY)).
+ andReturn(metainfoEntity);
+ replay(metainfoDAO);
+ AmbariServer ambariServer = new AmbariServer();
+ ambariServer.metainfoDAO = metainfoDAO;
+ ambariServer.ambariMetaInfo = ambariMetaInfo;
+
+ try {
+ ambariServer.checkDBVersion();
+ fail();
+ } catch(AmbariException e) {
+ // Expected
+ }
+ }
+
+
+}
Modified: incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java?rev=1462883&r1=1462882&r2=1462883&view=diff
==============================================================================
--- incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java (original)
+++ incubator/ambari/trunk/ambari-server/src/test/java/org/apache/ambari/server/orm/InMemoryDefaultTestModule.java Sun Mar 31 06:06:08 2013
@@ -31,6 +31,8 @@ public class InMemoryDefaultTestModule e
properties.setProperty(Configuration.PERSISTENCE_IN_MEMORY_KEY, "true");
properties.setProperty(Configuration.METADETA_DIR_PATH,
"src/test/resources/stacks");
+ properties.setProperty(Configuration.SERVER_VERSION_FILE,
+ "../version");
properties.setProperty(Configuration.OS_VERSION_KEY,
"centos5");
try {
Added: incubator/ambari/trunk/version
URL: http://svn.apache.org/viewvc/incubator/ambari/trunk/version?rev=1462883&view=auto
==============================================================================
--- incubator/ambari/trunk/version (added)
+++ incubator/ambari/trunk/version Sun Mar 31 06:06:08 2013
@@ -0,0 +1 @@
+1.3.0
\ No newline at end of file