mirror of
https://github.com/vale981/ray
synced 2025-03-04 17:41:43 -05:00
Fix java detached actor not working (#26003)
detached java actor is not working(actor will be dead after driver exit) when creating a java actor with ActorLifetime.DETACHED option Co-authored-by: sunkunjian1 <sunkunjian1@jd.com>
This commit is contained in:
parent
1055eadde0
commit
db6f8a2f01
3 changed files with 15 additions and 7 deletions
|
@ -177,8 +177,9 @@ inline ActorCreationOptions ToActorCreationOptions(JNIEnv *env,
|
|||
auto java_actor_lifetime = (jobject)env->GetObjectField(
|
||||
actorCreationOptions, java_actor_creation_options_lifetime);
|
||||
if (java_actor_lifetime != nullptr) {
|
||||
is_detached = std::make_optional<bool>(
|
||||
env->IsSameObject(java_actor_lifetime, STATUS_DETACHED));
|
||||
int java_actor_lifetime_ordinal_value =
|
||||
env->CallIntMethod(java_actor_lifetime, java_actor_lifetime_ordinal);
|
||||
is_detached = java_actor_lifetime_ordinal_value == DETACHED_LIFETIME_ORDINAL_VALUE;
|
||||
}
|
||||
|
||||
max_restarts =
|
||||
|
|
|
@ -115,7 +115,8 @@ jfieldID java_actor_creation_options_serialized_runtime_env;
|
|||
jfieldID java_actor_creation_options_max_pending_calls;
|
||||
|
||||
jclass java_actor_lifetime_class;
|
||||
jobject STATUS_DETACHED;
|
||||
int DETACHED_LIFETIME_ORDINAL_VALUE;
|
||||
jmethodID java_actor_lifetime_ordinal;
|
||||
|
||||
jclass java_placement_group_creation_options_class;
|
||||
jclass java_placement_group_creation_options_strategy_class;
|
||||
|
@ -366,10 +367,14 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved) {
|
|||
env->GetFieldID(java_actor_creation_options_class, "maxPendingCalls", "I");
|
||||
|
||||
java_actor_lifetime_class = LoadClass(env, "io/ray/api/options/ActorLifetime");
|
||||
java_actor_lifetime_ordinal =
|
||||
env->GetMethodID(java_actor_lifetime_class, "ordinal", "()I");
|
||||
jfieldID java_actor_lifetime_detached_field = env->GetStaticFieldID(
|
||||
java_actor_lifetime_class, "DETACHED", "Lio/ray/api/options/ActorLifetime;");
|
||||
STATUS_DETACHED = env->GetStaticObjectField(java_actor_lifetime_class,
|
||||
java_actor_lifetime_detached_field);
|
||||
jobject status_detached = env->GetStaticObjectField(java_actor_lifetime_class,
|
||||
java_actor_lifetime_detached_field);
|
||||
DETACHED_LIFETIME_ORDINAL_VALUE =
|
||||
env->CallIntMethod(status_detached, java_actor_lifetime_ordinal);
|
||||
|
||||
java_concurrency_group_impl_class =
|
||||
LoadClass(env, "io/ray/runtime/ConcurrencyGroupImpl");
|
||||
|
|
|
@ -205,8 +205,10 @@ extern jfieldID java_actor_creation_options_serialized_runtime_env;
|
|||
extern jfieldID java_actor_creation_options_max_pending_calls;
|
||||
/// ActorLifetime enum class
|
||||
extern jclass java_actor_lifetime_class;
|
||||
/// Enum DETACHED of ActorLifetime class
|
||||
extern jobject STATUS_DETACHED;
|
||||
/// ordinal method of ActorLifetime class
|
||||
extern jmethodID java_actor_lifetime_ordinal;
|
||||
/// ordinal value of Enum DETACHED of ActorLifetime class
|
||||
extern int DETACHED_LIFETIME_ORDINAL_VALUE;
|
||||
/// ConcurrencyGroupImpl class
|
||||
extern jclass java_concurrency_group_impl_class;
|
||||
/// getFunctionDescriptors method of ConcurrencyGroupImpl class
|
||||
|
|
Loading…
Add table
Reference in a new issue