blob: 642056408d23086594f435cf054ac23f169e896a [file] [log] [blame]
#!/usr/bin/python
# 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.
import re
import time
import logging
import ozone.util
from ozone.cluster import OzoneCluster
logger = logging.getLogger(__name__)
def setup_function():
global cluster
cluster = OzoneCluster.create()
cluster.start()
def teardown_function():
cluster.stop()
def test_client_failure_isolate_two_datanodes():
"""
In this test, all DNs are isolated from each other.
two of the DNs cannot communicate with any other node in the cluster.
Expectation :
Write should fail.
Keys written before partition created should be read.
"""
om = cluster.om
scm = cluster.scm
dns = cluster.datanodes
client = cluster.client
oz_client = cluster.get_client()
epoch_time = int(time.time())
volume_name = "%s-%s" % ("volume", epoch_time)
bucket_name = "%s-%s" % ("bucket", epoch_time)
key_name = "key-1"
oz_client.create_volume(volume_name)
oz_client.create_bucket(volume_name, bucket_name)
oz_client.put_key("/etc/passwd", volume_name, bucket_name, key_name, "THREE")
first_set = [om, scm, dns[0], client]
second_set = [dns[1]]
third_set = [dns[2]]
logger.info("Partitioning the network")
cluster.partition_network(first_set, second_set, third_set)
exit_code, output = oz_client.run_freon(1, 1, 1, 10240)
assert exit_code != 0, "freon run should have failed."
oz_client.get_key(volume_name, bucket_name, key_name, "/tmp/")
file_checksum = ozone.util.get_checksum("/etc/passwd", client)
key_checksum = ozone.util.get_checksum("/tmp/%s" % key_name, client)
assert file_checksum == key_checksum
def test_client_failure_isolate_one_datanode():
"""
In this test, one of the DNs is isolated from all other nodes.
Expectation :
Write should pass.
Keys written before partition created can be read.
"""
om = cluster.om
scm = cluster.scm
dns = cluster.datanodes
client = cluster.client
oz_client = cluster.get_client()
epoch_time = int(time.time())
volume_name = "%s-%s" % ("volume", epoch_time)
bucket_name = "%s-%s" % ("bucket", epoch_time)
key_name = "key-1"
oz_client.create_volume(volume_name)
oz_client.create_bucket(volume_name, bucket_name)
oz_client.put_key("/etc/passwd", volume_name, bucket_name, key_name, "THREE")
first_set = [om, scm, dns[0], dns[1], client]
second_set = [dns[2]]
logger.info("Partitioning the network")
cluster.partition_network(first_set, second_set)
exit_code, output = oz_client.run_freon(1, 1, 1, 10240)
assert re.search("3 way commit failed", output) is not None
assert exit_code == 0, "freon run failed with output=[%s]" % output
oz_client.get_key(volume_name, bucket_name, key_name, "/tmp/")
file_checksum = ozone.util.get_checksum("/etc/passwd", client)
key_checksum = ozone.util.get_checksum("/tmp/%s" % key_name, cluster.client)
assert file_checksum == key_checksum