protected Status writeToStorage()

in s3/src/main/java/site/ycsb/db/S3Client.java [338:411]


  protected Status writeToStorage(String bucket, String key,
                                  Map<String, ByteIterator> values, Boolean updateMarker,
                                  String sseLocal, SSECustomerKey ssecLocal) {
    int totalSize = 0;
    int fieldCount = values.size(); //number of fields to concatenate
    // getting the first field in the values
    Object keyToSearch = values.keySet().toArray()[0];
    // getting the content of just one field
    byte[] sourceArray = values.get(keyToSearch).toArray();
    int sizeArray = sourceArray.length; //size of each array
    if (updateMarker){
      totalSize = sizeArray*fieldCount;
    } else {
      try {
        S3Object object = getS3ObjectAndMetadata(bucket, key, ssecLocal);
        int sizeOfFile = (int)object.getObjectMetadata().getContentLength();
        fieldCount = sizeOfFile/sizeArray;
        totalSize = sizeOfFile;
        object.close();
      } catch (Exception e){
        System.err.println("Not possible to get the object :"+key);
        e.printStackTrace();
        return Status.ERROR;
      }
    }
    byte[] destinationArray = new byte[totalSize];
    int offset = 0;
    for (int i = 0; i < fieldCount; i++) {
      System.arraycopy(sourceArray, 0, destinationArray, offset, sizeArray);
      offset += sizeArray;
    }
    try (InputStream input = new ByteArrayInputStream(destinationArray)) {
      ObjectMetadata metadata = new ObjectMetadata();
      metadata.setContentLength(totalSize);
      PutObjectRequest putObjectRequest = null;
      if (sseLocal.equals("true")) {
        metadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
        putObjectRequest = new PutObjectRequest(bucket, key,
            input, metadata);
      } else if (ssecLocal != null) {
        putObjectRequest = new PutObjectRequest(bucket, key,
            input, metadata).withSSECustomerKey(ssecLocal);
      } else {
        putObjectRequest = new PutObjectRequest(bucket, key,
            input, metadata);
      }

      try {
        PutObjectResult res =
            s3Client.putObject(putObjectRequest);
        if(res.getETag() == null) {
          return Status.ERROR;
        } else {
          if (sseLocal.equals("true")) {
            System.out.println("Uploaded object encryption status is " +
                res.getSSEAlgorithm());
          } else if (ssecLocal != null) {
            System.out.println("Uploaded object encryption status is " +
                res.getSSEAlgorithm());
          }
        }
      } catch (Exception e) {
        System.err.println("Not possible to write object :"+key);
        e.printStackTrace();
        return Status.ERROR;
      }
    } catch (Exception e) {
      System.err.println("Error in the creation of the stream :"+e.toString());
      e.printStackTrace();
      return Status.ERROR;
    }

    return Status.OK;
  }