Skip to content

Commit 9072be2

Browse files
authored
force utf-8 encoding (#842)
Have Slurm force utf-8 encoding for some centers that have strange (ASCII) output.
1 parent dde2623 commit 9072be2

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

lib/ood_core/job/adapters/slurm.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ def get_jobs(id: "", owner: nil, attrs: nil)
169169
# jobs << job
170170
#
171171
# assuming keys and values are same length! if not we have an error!
172+
line = line.encode('UTF-8', invalid: :replace, undef: :replace)
172173
values = line.chomp(RECORD_SEPARATOR).strip.split(UNIT_SEPARATOR)
173174
jobs << Hash[fields.keys.zip(values)] unless values.empty?
174175
end
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ACCOUNTJOBIDEXEC_HOSTMIN_CPUSCPUSMIN_TMP_DISKNODESEND_TIMEDEPENDENCYFEATURESARRAY_JOB_IDGROUPGROUPOVER_SUBSCRIBESOCKETS_PER_NODEJOBIDCORES_PER_SOCKETNAMETHREADS_PER_CORECOMMENTARRAY_TASK_IDTIME_LIMITTIME_LEFTMIN_MEMORYTIMEREQ_NODESNODELISTCOMMANDCONTIGUOUSQOSPARTITIONPRIORITYREASONSTART_TIMESTSTATEUSERUIDRESERVATIONSUBMIT_TIMEWCKEYLICENSESEXC_NODESCORE_SPECNICESCHEDNODESS:C:TWORK_DIRTRES_PER_NODE
2+
pas1960123p0220140012024-06-26T14:19:40(null)(null)29471683PAS06544067OK*29471683_9*� non-utf8*stdout=/tmp/job.output930:0026:554556M3:05p0220/tmp/job.sh0pitzer-defaultcondo-ccapp-backfill-serial100072289None2024-06-26T14:16:35CDCOMPLETEDannie.oakley23327(null)2024-06-26T14:01:13(null)(null)N/A0(null)*:*:*/tmpgres/gpfs:ess:1

spec/job/adapters/slurm_spec.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -770,6 +770,29 @@ def job_info(opts = {})
770770
is_expected.to eql(job_info)
771771
end
772772
end
773+
774+
context "when job name has non utf8 characters" do
775+
776+
let(:squeue_args) {[
777+
"squeue",
778+
"--all",
779+
"--states=all",
780+
"--noconvert",
781+
"-o",
782+
"\u001E%a\u001F%A\u001F%B\u001F%c\u001F%C\u001F%d\u001F%D\u001F%e\u001F%E\u001F%f\u001F%F\u001F%g\u001F%G\u001F%h\u001F%H\u001F%i\u001F%I\u001F%j\u001F%J\u001F%k\u001F%K\u001F%l\u001F%L\u001F%m\u001F%M\u001F%n\u001F%N\u001F%o\u001F%O\u001F%q\u001F%P\u001F%Q\u001F%r\u001F%S\u001F%t\u001F%T\u001F%u\u001F%U\u001F%v\u001F%V\u001F%w\u001F%W\u001F%x\u001F%X\u001F%y\u001F%Y\u001F%z\u001F%Z\u001F%b",
783+
"-j",
784+
"123"
785+
]}
786+
787+
it "correctly handles non utf8 characters" do
788+
stdout = File.read('spec/fixtures/output/slurm/non_utf8_job_name.txt')
789+
stdout.force_encoding(Encoding::ASCII)
790+
allow(Open3).to receive(:capture3).with({}, *squeue_args, stdin_data: "").and_return([stdout, '', double("success?" => true)])
791+
job = OodCore::Job::Factory.build_slurm({}).info('123')
792+
expect(job.job_owner).to eq('annie.oakley')
793+
expect(job.job_name).to eq('��� non-utf8')
794+
end
795+
end
773796
end
774797

775798
describe "#status" do

0 commit comments

Comments
 (0)