// Copyright (c) 2011-present, Facebook, Inc. All rights reserved. // This source code is licensed under both the GPLv2 (found in the // COPYING file in the root directory) and Apache 2.0 License // (found in the LICENSE.Apache file in the root directory). // // This file implements the "bridge" between Java and C++ for // rocksdb::CompactionJobInfo. #include #include "include/org_rocksdb_CompactionJobInfo.h" #include "rocksdb/listener.h" #include "rocksjni/portal.h" /* * Class: org_rocksdb_CompactionJobInfo * Method: newCompactionJobInfo * Signature: ()J */ jlong Java_org_rocksdb_CompactionJobInfo_newCompactionJobInfo( JNIEnv*, jclass) { auto* compact_job_info = new rocksdb::CompactionJobInfo(); return reinterpret_cast(compact_job_info); } /* * Class: org_rocksdb_CompactionJobInfo * Method: disposeInternal * Signature: (J)V */ void Java_org_rocksdb_CompactionJobInfo_disposeInternal( JNIEnv*, jobject, jlong jhandle) { auto* compact_job_info = reinterpret_cast(jhandle); delete compact_job_info; } /* * Class: org_rocksdb_CompactionJobInfo * Method: columnFamilyName * Signature: (J)[B */ jbyteArray Java_org_rocksdb_CompactionJobInfo_columnFamilyName( JNIEnv* env, jclass, jlong jhandle) { auto* compact_job_info = reinterpret_cast(jhandle); return rocksdb::JniUtil::copyBytes( env, compact_job_info->cf_name); } /* * Class: org_rocksdb_CompactionJobInfo * Method: status * Signature: (J)Lorg/rocksdb/Status; */ jobject Java_org_rocksdb_CompactionJobInfo_status( JNIEnv* env, jclass, jlong jhandle) { auto* compact_job_info = reinterpret_cast(jhandle); return rocksdb::StatusJni::construct( env, compact_job_info->status); } /* * Class: org_rocksdb_CompactionJobInfo * Method: threadId * Signature: (J)J */ jlong Java_org_rocksdb_CompactionJobInfo_threadId( JNIEnv*, jclass, jlong jhandle) { auto* compact_job_info = reinterpret_cast(jhandle); return static_cast(compact_job_info->thread_id); } /* * Class: org_rocksdb_CompactionJobInfo * Method: jobId * Signature: (J)I */ jint Java_org_rocksdb_CompactionJobInfo_jobId( JNIEnv*, jclass, jlong jhandle) { auto* compact_job_info = reinterpret_cast(jhandle); return static_cast(compact_job_info->job_id); } /* * Class: org_rocksdb_CompactionJobInfo * Method: baseInputLevel * Signature: (J)I */ jint Java_org_rocksdb_CompactionJobInfo_baseInputLevel( JNIEnv*, jclass, jlong jhandle) { auto* compact_job_info = reinterpret_cast(jhandle); return static_cast(compact_job_info->base_input_level); } /* * Class: org_rocksdb_CompactionJobInfo * Method: outputLevel * Signature: (J)I */ jint Java_org_rocksdb_CompactionJobInfo_outputLevel( JNIEnv*, jclass, jlong jhandle) { auto* compact_job_info = reinterpret_cast(jhandle); return static_cast(compact_job_info->output_level); } /* * Class: org_rocksdb_CompactionJobInfo * Method: inputFiles * Signature: (J)[Ljava/lang/String; */ jobjectArray Java_org_rocksdb_CompactionJobInfo_inputFiles( JNIEnv* env, jclass, jlong jhandle) { auto* compact_job_info = reinterpret_cast(jhandle); return rocksdb::JniUtil::toJavaStrings( env, &compact_job_info->input_files); } /* * Class: org_rocksdb_CompactionJobInfo * Method: outputFiles * Signature: (J)[Ljava/lang/String; */ jobjectArray Java_org_rocksdb_CompactionJobInfo_outputFiles( JNIEnv* env, jclass, jlong jhandle) { auto* compact_job_info = reinterpret_cast(jhandle); return rocksdb::JniUtil::toJavaStrings( env, &compact_job_info->output_files); } /* * Class: org_rocksdb_CompactionJobInfo * Method: tableProperties * Signature: (J)Ljava/util/Map; */ jobject Java_org_rocksdb_CompactionJobInfo_tableProperties( JNIEnv* env, jclass, jlong jhandle) { auto* compact_job_info = reinterpret_cast(jhandle); auto* map = &compact_job_info->table_properties; jobject jhash_map = rocksdb::HashMapJni::construct( env, static_cast(map->size())); if (jhash_map == nullptr) { // exception occurred return nullptr; } const rocksdb::HashMapJni::FnMapKV, jobject, jobject> fn_map_kv = [env](const std::pair>& kv) { jstring jkey = rocksdb::JniUtil::toJavaString(env, &(kv.first), false); if (env->ExceptionCheck()) { // an error occurred return std::unique_ptr>(nullptr); } jobject jtable_properties = rocksdb::TablePropertiesJni::fromCppTableProperties( env, *(kv.second.get())); if (env->ExceptionCheck()) { // an error occurred env->DeleteLocalRef(jkey); return std::unique_ptr>(nullptr); } return std::unique_ptr>( new std::pair(static_cast(jkey), jtable_properties)); }; if (!rocksdb::HashMapJni::putAll(env, jhash_map, map->begin(), map->end(), fn_map_kv)) { // exception occurred return nullptr; } return jhash_map; } /* * Class: org_rocksdb_CompactionJobInfo * Method: compactionReason * Signature: (J)B */ jbyte Java_org_rocksdb_CompactionJobInfo_compactionReason( JNIEnv*, jclass, jlong jhandle) { auto* compact_job_info = reinterpret_cast(jhandle); return rocksdb::CompactionReasonJni::toJavaCompactionReason( compact_job_info->compaction_reason); } /* * Class: org_rocksdb_CompactionJobInfo * Method: compression * Signature: (J)B */ jbyte Java_org_rocksdb_CompactionJobInfo_compression( JNIEnv*, jclass, jlong jhandle) { auto* compact_job_info = reinterpret_cast(jhandle); return rocksdb::CompressionTypeJni::toJavaCompressionType( compact_job_info->compression); } /* * Class: org_rocksdb_CompactionJobInfo * Method: stats * Signature: (J)J */ jlong Java_org_rocksdb_CompactionJobInfo_stats( JNIEnv *, jclass, jlong jhandle) { auto* compact_job_info = reinterpret_cast(jhandle); auto* stats = new rocksdb::CompactionJobStats(); stats->Add(compact_job_info->stats); return reinterpret_cast(stats); }